2013-03-08 9 views
9

Voglio aggiungere un "AND" clausola alla fine di un generatore di query, il codice è simile al seguente:laravel generatore di query con e nella domanda

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

Ma la ricerca di una clausola AND in laravel non potevo trovare nessuno di equivalente. Potresti aiutarmi con questo problema?

risposta

19

soluzione JCS possono ancora produrre alcuni risultati inattesi causa l'ordine delle operazioni. Dovresti raggruppare tutti gli OR insieme come faresti in SQL, definendo esplicitamente la logica. Rende anche più facile la comprensione per la prossima volta che tu (o un altro membro del team), quando leggono il codice.

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

Amico, esattamente quello che stavo cercando – Chris

+0

Grazie mille. e penso che debba essere "o dove non" o "dove". Ha causato un errore in laravel 5.5. –

10

semplicemente un'altra clausola where farà, e sarà utilizzerà

$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); 
Problemi correlati