Как написать сгруппированное where в laravel?

Рейтинг: 0Ответов: 1Опубликовано: 11.08.2023

Есть контроллер в котором выполняется запрос с многочисленными условиями. Выглядит это примерно так:

$houses = House::with('areas')->
          where('format_house', '=', $format_house);

$houses = $houses->where('price', '<', $value);
$houses = $houses->where('area', '>', $value);

$houses = $houses->where('address', 'LIKE', "%" . $value . "%")
                    ->orWhere('metro', 'LIKE', "%" . $value . "%")
                    ->orWhere('description_metro', "LIKE", "%" . $value . "%");

$houses = $houses->orderBy('price')->
            orderByDesc('created_at')->
            orderByDesc('area');

   $houses = $houses->paginate(16);

В конец подключаются еще условия. Обращу внимание, что через конструкцию orWhere подключаются альтернативные условия. Проблема в том, что если выполняется альтернативное условие поиска, то отключаются подключенные ранее условия по полям format_house, price, area. Мне нужно же что-то вроде этого, покажу как в SQL это выглядело бы:

Where ((`format_house` = 'Аренда') and (`price` < 1000) and (`area` > 5) 
and ((`address` LIKE '%Пушкина%') or (`metro` LIKE '%Пушкина%') or (`description_metro` LIKE '%Пушкина%')));

Можно как-то в ларавел обернуть дополнительными "скобками" условие where, чтобы условие or распространялось только на тройку значений, и не отменяла другие предыдущие where?

Всем спасибо, если ответите!

Ответы

▲ 1Принят

привет я делал это так

P.s use ($yourVariable) можешь передать переменные

$houses = $houses->where(function ($query) use ($yourVariable) {
   $query->where('address', 'LIKE', "%" . $yourVariable . "%")
   ->orWhere('metro', 'LIKE', "%" . $yourVariable . "%")
   ->orWhere('description_metro', "LIKE", "%" . $yourVariable . "%");
});