2016-08-09 68 views
0

在Laravel中,您可以定義查詢範圍來定義約束。有什麼辦法可以得到與此範圍相反的方式嗎?這裏有一個簡單的例子:如何獲得與Laravel查詢範圍相反的內容

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

假設性別的唯一選擇是「M」和「F」。因此,這將給我們一個所有男性學生的名單。

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

Laravel有沒有辦法在範圍之外定義其他所有的東西?即像

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

我知道,人們總是可以再拍範圍female(),但它會是不錯,只是有一些涉及到某個特定範圍的對面。

+0

呃...在你的情況下,只是創建一個scop e稱爲scopeFemale()....如果沒有明顯的相反用@scrubmx答案 –

回答

2

我沒有辦法知道要達到您的要求。

但是你總是可以創建一個更加動態查詢範圍,處理這兩種情況:

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

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

你可以這樣做成才(領域,運營商,值):

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

這是一個書的例子(學習Laravel的雄辯,弗朗切斯科Malatesta,PACKT。頁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; 
    });