2016-08-09 9 views
0

Laravelでは、クエリスコープを定義して制約を定義できます。この範囲の反対を得る方法はありますか?簡単な例を示します。Laravelクエリスコープの逆を取得する方法

男女の選択肢は「M」と「F」だけであるとします。これにより、すべての男子学生のリストが得られます。

範囲外の他のすべてを定義する方法はありますか?私。

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

のようなものは、私は1つは、常に別のスコープfemale()を作ることができることを知っているが、ただ与えられた範囲の反対に関連するものを持っていいだろう。

+0

よく...あなたの場合はスコープを作成してくださいscopeFemale()と呼ばれるe ...明白な反対がない場合は、@ scrubmx answer –

答えて

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(); 

これはあなたが常に両方のケースを処理するために、より動的なクエリスコープを作成することができますしかし

本の例(ララベルの寓話を学ぶ、フランチェスコ・マラテスタ著、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; 
    }); 
関連する問題