2016-08-09 194 views
0

In Laravel können Sie Abfragebereiche definieren, um Einschränkungen zu definieren. Gibt es eine Möglichkeit, das Gegenteil von diesem Bereich zu erreichen? Hier ist ein einfaches Beispiel:So erhalten Sie das Gegenteil von Laravel-Abfragebereichen

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

angenommen, dass die einzige Wahl für Geschlecht ist „M“ und „F“. Dies gibt uns eine Liste aller männlichen Studenten.

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

Gibt es einen Weg in Laravel, alles andere außerhalb des Geltungsbereichs zu definieren? I.e. so etwas wie

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

Ich weiß, dass man immer einen anderen Rahmen machen female() aber es wäre schön, nur um etwas zu haben, die das Gegenteil von einem bestimmten Umfang betrifft.

+0

gut ... in Ihrem Fall erstellen Sie einfach einen scop e called scopeFemale() .... Wenn es keine offensichtliche entgegengesetzte Verwendung gibt @scrubmx antwort –

Antwort

2

Es gibt keine Möglichkeit, dass ich weiß, um zu erreichen, wonach Sie suchen.

auch immer Sie immer eine dynamischere Abfragebereich, beide Fälle behandeln erstellen:

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

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

Sie someting wie dies tun können (Feld, Operator, Wert):

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

Dieses eine ist Beispiel eines Buches (Learning Laravel's Eloquent, von Francesco Malatesta, PACKT. Seite 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; 
    });