>  기사  >  백엔드 개발  >  Laravel(StepWise)의 전역 범위.

Laravel(StepWise)의 전역 범위.

Barbara Streisand
Barbara Streisand원래의
2024-09-24 06:20:32500검색

Global Scope in Laravel (StepWise).

전역 범위는 Laravel의 핵심 개념으로, 애플리케이션 전체에서 Eloquent 조건을 재사용할 수 있습니다. 전역 범위를 구현하면 모든 모델의 쿼리에 특정 조건을 적용하여 코드 재사용 및 일관성을 높일 수 있습니다. 대조적으로, 로컬 범위는 단일 모델로 제한됩니다. 이 튜토리얼에서는 Laravel에서 전역 범위를 생성하고 활용하는 방법에 중점을 둘 것입니다.

  1. 이 단계에서는 앱/범위/ActiveScope
<?php

namespace app\Scopes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;

class ActiveScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        // Define your global condition here
        $builder->where('is_active', '=', '1');

        //or we can write
        $builder->whereIsActive('1');

    }
}
  1. 이제 사용자 모델에서 ActiveScope를 정의합니다. 주어진 모델의 부팅 메소드를 재정의하고 addGlobalScope 메소드를 사용해야 합니다:
<?php

namespace App;

use App\Scopes\AgeScope;
use Illuminate\Database\Eloquent\Model;
use App\Scopes\ActiveScope;

class User extends Model
{
    /**
     * The "booting" method of the model.
     *
     * @return void
     */
    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope(new ActiveScope);
    }
}

모델에 ActiveScope를 추가한 후 User::all()은 다음 SQL을 생성합니다.

select * from `users` where `is_active` = '1'

전역 범위를 적용하지 않고 모든 데이터를 가져오려는 시나리오가 있을 수 있습니다. Laravel에서는 WithoutGlobalScope 메소드를 사용하여 전역 범위를 우회하고 모든 데이터를 가져올 수 있습니다.

User::withoutGlobalScope(ActiveScope::class)->get();

모델에 적용된 여러 개의 전역 범위 또는 전체 범위를 제거하려는 경우 Laravel의 WithoutGlobalScopes 메소드를 사용할 수 있습니다. 이 방법을 사용하면 모든 전역 범위를 우회하거나 제거하려는 전역 범위를 지정할 수 있습니다. 예는 다음과 같습니다.

// Remove all of the global scopes...
User::withoutGlobalScopes()->get();
// Remove some of the global scopes...
User::withoutGlobalScopes([
    ActiveScope::class, AgeScope::class
])->get();

그리고 콘텐츠가 마음에 들고 더 멋진 기사를 후원하고 싶다면 커피 한 잔 사주세요! ?️? 귀하의 지원은 나에게 세상을 의미하며 지식이 계속 흐르도록 도와줍니다. 바로 여기서 할 수 있습니다: ? 커피 사주세요

위 내용은 Laravel(StepWise)의 전역 범위.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.