@stts

Как добавлять whereHas по условию в Laravel 5?

Суть вопроса достаточно простая и не должна бы была возникнуть на других фреймворках.
Мне нужно используя ELOQUENT ORM построить составной запрос в зависимости от переданных параметров(добавляется или нет дополнительный параметр whereHas(...))
Подскажите как это реализовывается
$req=Object::whereHas('address',function($q){
			$q->where('city_id','=',Request::input('city_id'));
		});
		if(!empty($input['category_id'])){
			$cat=Cat::where('id','=',$input['category_id'])->first();
			if($cat->isLeaf()){
				$req=Object::whereHas('address',function($q){
					$q->where('city_id','=',Request::input('city_id'));
				});
				$req->whereHas('category',function($q){
					$q->where('id','=',Request::input('category_id'));
				});
				$req->get();
				$objects=$req->get();
				print_r($objects);
			}
			
		}
		$objects=$req->get();
		print_r($objects);

Изначально пробовал вот такую конструкцию, но из этого ничего не получилось
  • Вопрос задан
  • 733 просмотра
Пригласить эксперта
Ответы на вопрос 1
@gsur
Не знаю актуально ли, но провозившись с похожей проблемой некоторое время, нашел такое решение:
- Берем начальный экземпляр запроса
$query = DB::select('users')->where('age', '>=', '16');

- Возвращаем по условию результаты запроса с различными where, и конечно же участвует начальный where (хотя он не обязателен)
if (a > b) 
      return $query->where('name', 'John')->get();
elseif (b > a)
      return $query->where('lastname', 'Winners')->get();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы