-
라라벨 global scopes백엔드/laravel 2024. 1. 20. 16:51
전역 범위(global scopes)는 특정 모델에 대해 실행되는 모든 쿼리에 제약 조건을 추가할 수 있는
eloquent의 강력한 기능입니다.
사용자 모델이 있고 잔액이 특정 숫자보다 적은 사용자만 검색하고 싶다고 가정해 보겠습니다.
1. 전역 범위 생성하기
php artisan make:scope BalanceVerifiedScope
app\Models\Scopes\BalanceVerifiedScope.php 파일이 생성됨
public function apply(Builder $builder, Model $model): void
{
$builder->where(column: 'balance', oprator: '<', value: 10000);
}apply 메서드는 모델에 대해 실행되는 모든 쿼리에 추가되어야 하는 제약 조건을 정의하는 필수 메서드입니다.
첫 번째 인수는 전역 범위가 적용되는 쿼리 빌더 인스턴스인 빌더 인스턴스입니다.
그리고 전역 범위가 적용되는 모델 인스턴스인 모델이 있습니다.
따라서 빌더 쿼리 개체를 사용해서 where 메서드를 연결하는 것입니다.
app/Models/User.php 에 적용해 보겠습니다.
protected static function boot()
{
static::addGlobalScope(new BalanceVerifiedScope);
}booted() 메서드는 Laravel 모델의 수명 주기 후크 중 하나로, 모델이 부팅될 때 호출됩니다.
이 메서드를 사용하면 모델이 처음 생성될 때 수행해야 하는 초기화 작업을 수행할 수 있습니다.
모델 이벤트 리스너를 정의하거나 다른 초기화 작업을 수행하는 데 사용됩니다.
예를 들어, 모델이 부팅될 때 특정 이벤트 리스너를 등록하거나 특정 속성을 초기화하는 등의 작업을 할 수 있습니다.
이는 모델의 인스턴스가 생성되었을 때 실행되는 초기화 로직을 구현하는 데 유용합니다.
스코프 임시로 비활성화하기
$posts = User::withoutGlobalScopes()->get();
'백엔드 > laravel' 카테고리의 다른 글
라라벨 dynamic scope. (0) 2024.01.20 라라벨 local scopes (0) 2024.01.20 라라벨 기존 모델의 복사본(replicate) 만들기 (0) 2024.01.20 라라벨 소프트 삭제(soft deleting)된 레코드를 주기적으로 삭제하기 (0) 2024.01.20 라라벨 소프트 삭제(Soft Deleting) (0) 2024.01.20