Laravel의 전역 범위, 쉬운 방법.

4082 단어 ormphplaravelelequent
예를 들어 특정 역할에 대한 쿼리를 반복하는 자신을 발견한 적이 있습니다.
실제로 전역 범위가 필요한 시나리오를 가정해 보겠습니다. 주문 테이블이 있고 무료 주문과 유료 주문이 있습니다.
  • 클라이언트는 자신의 주문만 볼 수 있습니다.
  • 광고에서 고객의 주문을 볼 수 있습니다.
  • 배송 및 백오피스에서 모든 주문을 볼 수 있습니다.

  • 먼저 범위를 만들고 호출할 수 있습니다App\Scopes\OrderScope.php.

    <?php
    
    namespace App\Scopes;
    
    use Illuminate\Database\Eloquent\Builder;
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Database\Eloquent\Scope;
    use Auth;
    
    class ComplaintScope implements Scope
    {
        /**
         * Apply the scope to a given Eloquent query builder.
         * @param  \Illuminate\Database\Eloquent\Builder  $builder
         * @param  \Illuminate\Database\Eloquent\Model  $model
         * @return void
         */
        public function apply(Builder $builder, Model $model)
        {
            // builder is the query 
            if (Auth::user()->isClient()) {
                $builder->where('user_id', Auth::id());
            } elseif (Auth::user()->isCommercial()) {
                $builder->whereHas('user', function (Builder $query) {
                    $query->where('commercial_id', Auth::user()->id);
                });
            }
        }
    }
    


    그런 다음 모델에서 그렇게 사용합니다.

    use App\Scopes\ComplaintScope;
    
    //add that function to the model
        protected static function booted()
        {
            static::addGlobalScope(new ComplaintScope);
        }
    

    좋은 웹페이지 즐겨찾기