2013-03-27 3 views

ответ

31

Вы можете гнездо, где пункты: http://laravel.com/docs/database/fluent#nested-where

Model::where(function($query) 
{ 
    $query->where('a', 'like', 'keyword'); 
    $query->or_where('b', 'like', 'keyword'); 
}) 
->where('c', '=', '1'); 

Это должно производить: SELECT * FROM models WHERE (a LIKE %keyword% OR b LIKE %keyword%) AND c = 1

+0

Вышеуказанное утверждение работает, если ключевое слово - это строка. Но как я могу использовать вышеперечисленное, если ключевое слово является переменной? – SUB0DH

+3

@ SUB0DH Вы можете ввести переменную в область закрытия с помощью ** use **. 'function ($ query) use ($ variable)' –

-3

Вы можете использовать DB::raw() в начале where(), чтобы добавить в него как-либо заявление.

+0

Использование встроенных методов «Чудеса» намного лучше, чем это. – aowie1

7

Для более точного ответа на пример:

$val = '%keyword%'; 

A_Table_Model::where(function($query) use ($val) 
{ 
    $query->where('a', 'like', $val); 
    $query->or_where('b', 'like', $val); 
}) 
->where('c', '=', 1) 
->where('d', '=', 5) 
->get(); 

Примечание: Это Laravel 3 синтаксис , используйте camelCase или Where() для Laravel 4

+0

В Laravel 4 (по крайней мере) вам нужно использовать '$ val' в круглых скобках, как в примере' A_Table_Model :: где (функция ($ query) use ($ val) ' –

2

В Laravel 5.1+ это также сделает работу и выглядит более чистым:

Model::where(function($query) { 
    $query->where('a', 'like', 'keyword'); 
    $query->or_where('b', 'like', 'keyword'); 
})->where('c', '=', '1')->get(); 
+0

Кому-то, кто проголосовал за это - не можете ли вы объяснить, что не так с этим решением? – Kornel

+1

Это был не я, проголосовавший, но в любом случае: ваш ответ не охватывает« И c = 1 и d = 5 », часть вопроса, поэтому ваш ответ неверен. –

+0

true. Обновлено ... – Kornel

Смежные вопросы