전역 범위는 Laravel의 핵심 개념으로, 애플리케이션 전체에서 Eloquent 조건을 재사용할 수 있습니다. 전역 범위를 구현하면 모든 모델의 쿼리에 특정 조건을 적용하여 코드 재사용 및 일관성을 높일 수 있습니다. 대조적으로, 로컬 범위는 단일 모델로 제한됩니다. 이 튜토리얼에서는 Laravel에서 전역 범위를 생성하고 활용하는 방법에 중점을 둘 것입니다.
<?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'); } }
<?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 중국어 웹사이트의 기타 관련 기사를 참조하세요!