2016-08-09 2 views
0

Laravel에서 쿼리 범위를 정의하여 제약 조건을 정의 할 수 있습니다. 이 범위의 반대를 얻을 수있는 방법이 있습니까? 다음은 간단한 예입니다.Laravel 쿼리 범위의 반대쪽을 얻는 방법

function scopeMale($query) { 
    return $query->whereGender("M"); 
} 

성별에 대한 유일한 선택은 "M"및 "F"라고 가정합니다. 이것은 그러므로 우리에게 모든 남학생들의 목록을 줄 것입니다.

$male = Students::male()->get(); 

범위 밖의 모든 것을 정의하는 방법이 있습니까? 나는.

$female = Students::!male()->get(); 

같은 내가 하나가 항상 다른 범위 female()을 할 수 있지만, 그냥 주어진 범위의 반대에 관련된 무언가가 좋을 것이라는 점을 알고있다.

+0

... 귀하의 경우 그냥 SCOP를 만들 scopeFemale()라는 전자 : 명백한 반대가 없다면 @scrubmx answer –

답변

2

당신이 찾고있는 것을 성취 할 수있는 방법이 없다.

function scopeGender($query, $gender) { 
    return $query->whereGender($gender); 
} 

$male = Students::gender('M')->get(); 
$female = Students::gender('F')->get(); 
0

당신은이 같은가 someting (필드, 연산자, 값)을 수행 할 수 있습니다 :

$female = Students::where('gender', '<>', 'M')->get(); 

이는 당신이 항상 두 경우 모두를 처리하기 위해 더 동적 쿼리 범위를 만들 수 있습니다 그러나

책의 예 (프란체스코 말라테스타, PACKT에 의한 학습 Laravel의 웅변. 55 페이지) 잘

Route::get('...', function(){ 
     $results = \App\Book::where(function($query){ 
      $query 
       ->where(function($query){ 
        // other conditions here... 
        $query->where(function($query){ 
         // deeper and deeper in the seas of 
         conditions... 
        }); 
       }) 
       ->orWhere('field', 'operator', 'condition'); 
     })->orWhere(function($query){ 
      $query 
       ->where('field', 'operator', 'condition') 
       ->orWhere(function($query){ 
        // other conditions here... 
       }); 
     })->get(); 
     return $results; 
    });