2016-01-25 6 views
1

Я пытаюсь сортировать по выбору, который пользователи могут сделать, когда элементы хранятся в таблице «type» в базе данных. Я использую laravel 5.2.Laravel query builder с ограничением функций where

Снимок экрана множественного выбора функции (текст в dansih):

enter image description here

Они могут, например, выбрать (в множественный): Яблоко Banana Кокосовое Арбуз

Если они выберите только Apple, все яблоки должны быть показаны - достаточно просто. Но если они выберут оба яблока и кокоса, должны быть показаны как яблоки, так и кокос.

$query = User::where('type', '=', 'Apple')->get(); 

получает все яблоки.

Но если я делаю:

$query = User::where('type', '=', 'Apple')->where('type', '=', 'Coconut')->get(); 

Только пользователи, которые выбрали как Apple, и кокос будут показаны. Пользователь не может выбрать как яблоки, так и кокосовые орехи в бэкэнд, и, следовательно, ни один пользователь не будет показан.

Как создать запрос, в котором пользователи, которые выбрали тип Apple или Coconut в бэкэнд, будут показаны путем создания запроса, который не ограничивает вывод, только если пользователь выбрал оба (которые не являются возможно для пользователя)?

+0

использовать 'orWhere' –

ответ

2

Вы можете использовать:

$query = User::where(function($query) { 
$query->where('type', '=', 'Apple') 
->orWhere('type', '=', 'Coconut'); 
)}->get(); 

Это позволит получить как кокосовый орех и яблоки ..

1

Если вы хотите, чтобы ограничить результаты Apple сек илиCoconut с, вы должны использовать правильный ->orWhere() заявление, а другой ->where(). По умолчанию цепочка ->where() приведет к WHERE ... AND ... AND .... Изменение вашего $query на:

$query = User::where('type', '=', 'Apple')->orWhere('type', '=', 'Coconut')->get(); 

приведет в запросе WHERE ... OR ... и ограничить результаты Apple с или Coconut с.