Laravel(StepWise)의 전역 범위.

Barbara Streisand
풀어 주다: 2024-09-24 06:20:32
원래의
637명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿