2013-03-08 19 views
9

Ich will ein hinzufügen "AND" Klausel am Ende eines Query Builder, sieht der Code wie folgt aus:Laravel Query Builder mit und in der Abfrage

$orderers = DB::table('address')->where(function($query) use ($term) { 
          $query->where('id', 'LIKE', '%' . $term . '%') 
            ->or_where('name', 'LIKE', '%' . $term . '%') 
            ->or_where('status', 'LIKE', '%' . $term . '%') 
            ->and_clause_goes_here('is_orderer', '=', '1'); 
         })->paginate($per_page); 

Aber für eine AND-Klausel in Laravel Suche I couldn finde nichts Entsprechendes. Könnten Sie mir bei diesem Problem helfen?

Antwort

19

JCS Lösung ergeben kann noch einige unerwartete Ergebnisse an die Reihenfolge der Operationen aufgrund verwenden werden. Sie sollten alle ORs wie in SQL gruppieren und die Logik explizit definieren. Es erleichtert Ihnen auch das nächste Mal, wenn Sie (oder ein anderes Teammitglied) den Code lesen.

SELECT * FROM foo WHERE a = 'a' 
AND (
    WHERE b = 'b' 
    OR WHERE c = 'c' 
) 
AND WHERE d = 'd' 


Foo::where('a', '=', 'a') 
    ->where(function ($query) 
    { 
     $query->where('b', '=', 'b') 
      ->or_where('c', '=', 'c'); 
    }) 
    ->where('d', '=', 'd') 
    ->get(); 
+0

Alter, genau das, was ich suchte – Chris

+0

Vielen Dank. und ich denke, es muss 'orWhere' nicht' or_where' sein. Es verursachte einen Fehler in Laravel 5.5. –

10

einfach eine andere Klausel where tun, und wird

$orderers = DB::table('address')->where(function($query) use ($term) { 
          $query->where('id', 'LIKE', '%' . $term . '%') 
            ->where('is_orderer', '=', '1'); 
            ->or_where('name', 'LIKE', '%' . $term . '%') 
            ->or_where('status', 'LIKE', '%' . $term . '%') 
         })->paginate($per_page); 
Verwandte Themen