2014-11-17 8 views
1

Я строю запрос, где я хочу, чтобы получить следующее:Laravel `orWhere()` функция

SELECT * из таблицы, где цвет = «белый» OR цвет = «красный»

Этот цвет фильтр и на основе выбора клиента он добавляет красный или белый цветной фильтр или даже больше цветов.

Так я тестировал с:

if(isset($input['filter']['color'])) { 
     $query->where(function($where) use ($input) { 
      foreach($input['filter']['color'] as $color) { 
       $where->where('color', array($color)); 
      } 
     }); 
    } 

Но это приводит:

SELECT * FROM таблицы WHERE (цвет = 'белый' И цвет = 'красный')

Любой один, как может сказать мне, как это решить? Я тестировал некоторые вещи, но я не получаю результат, который я хочу. Цвет только на фильтре, есть больше параметров фильтрации.

Так например, запрос фильтра может выглядеть следующим образом:

SELECT * из таблицы, где (цвет = «белый» ИЛИ цвет = «красный») И (используется = «Y») И (размер = 1 ИЛИ размер = 2) и т.д ..

Эрвин

ответ

2

Либо использовать orWhere фильтр:

if (isset($input['filter']['color'])) { 
    $query->where(function ($query) use ($input) { 
     foreach ($input['filter']['color'] as $color) { 
      $query->orWhere('color', $color); 
     } 
    }); 
} 

или просто использовать whereIn:

if (isset($input['filter']['color'])) { 
    $query->whereIn('color', $input['filter']['color']); 
} 
+0

Никогда, хотя о том, где в функции. Это простое решение. Спасибо за совет! – user2308335