2013-03-08 15 views
9

Chcę dodaj „AND” klauzuli do końca konstruktora zapytań, kod wygląda następująco:laravel kreator zapytań z I w zapytaniu

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

Ale szukając i klauzula w laravel nie mogłam nie znajdziesz żadnego odpowiednika. Czy możesz mi pomóc w rozwiązaniu tego problemu?

Odpowiedz

19

roztwór JCS może wciąż uzyskując nieoczekiwane rezultaty ze względu na kolejność czynności. Powinieneś zgrupować wszystkie OR razem, tak jak w SQL, jawnie definiując logikę. Ułatwia to również zrozumienie dla następnego razu (lub innego członka zespołu) po przeczytaniu kodu.

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

Koleś, dokładnie to, czego szukałem – Chris

+0

Wielkie dzięki. i myślę, że musi to być 'lubWhere' not' or_where'. Wywołało błąd w laravel 5.5. –

10

prostu kolejnym gdzie klauzula wykonania, a będą wykorzystywać

$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); 
Powiązane problemy