Как использовать "или" с несколькими "где" в Eloquent? - PullRequest
0 голосов
/ 03 сентября 2018

Как я могу реализовать это в Eloquent?.

select * from product where name like '%value%' and (product_type = product_type_param or product_type_param = 0);

Если указано значение product_type_param, равное 0, будут выбраны продукты всех типов, с учетом того, что, конечно, имя также соответствует.

Мой текущий код:

$result = Product::where( [  ['name', 'like', '%' . 
$searchAttributes['name'] . '%'],
    ['product_type', '=', $searchAttributes['product_type']]]
     )->get();

Идея будет выглядеть примерно так (извините, пример показывает только мое намерение):

 ['product_type', '=', $searchAttributes['product_type']] or [$searchAttributes['product_type'] == 0]]

Должен ли я выполнить необработанный запрос?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Вы можете использовать функцию закрытия для охвата запроса

Product::where('name', 'like', '%' . $searchAttributes['name'] . '%')
        ->where(function($q) use ($searchAttributes) {
             $q->where('product_type', $searchAttributes['product_type'])
               ->orWhere('product_type_param', 0);
        })->get();
0 голосов
/ 03 сентября 2018

с использованием orWhere:

  Product::where([
       ['column','value'],
       ['another_column','value'],
   ])->orWhere([
      ['column','value']
   ])->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...