#laravel #eloquent #many-to-many #pivot-table
Вопрос:
В настоящее время я пишу поисковый запрос, но у меня возникли проблемы с соединением a where
с a whereHas
если я хочу искать только по категориям..
Приведенный ниже запрос работает, если я просто ищу категории в одиночку
$goals = $myGoals
->whereHas('categories', function ($q) use ($search) {
$q->where('name', 'like', "%$search%");
})->paginate(10);
если я хочу искать только название..
То же, что и выше, если я хочу найти название целей соло
$goals = $myGoals->where('title', 'like', "%$search%" )->paginate(10);
оба запроса работают, если я хочу искать их по отдельности.
Попытка запроса
Ниже приведен запрос, который я написал, чтобы позволить пользователю искать title
цель и цель name
category
.
$myGoals = $team->goals();
$goals = $myGoals
->whereHas('categories', function ($q) use ($search) {
$q->where('name', 'like', "%$search%");
})->where('title', 'like', "%$search%" )->paginate(10);
Я попробовал выполнить вышеприведенный запрос, но результаты поиска возвращаются пустыми, когда я ввожу ввод. Я также попытался поменять where()
orWhere()
местами значение, которое затем возвращает цель, которая не принадлежит $team
экземпляру модели, но является записью цели, ссылающейся на другую Team
модель id
в сводной таблице.
Может ли кто-нибудь определить, где я иду не так? Спасибо
Ответ №1:
Вам нужно использовать все это внутри, где.
$goals = $myGoals->where(function ($query) use ($search){
return $query->whereHas('categories', function ($q) use ($search) {
$q->where('name', 'like', "%$search%");
})->orWhere('title', 'like', "%$search%" );
})->paginate(10);
Комментарии:
1. это сработало как заклинание! спасибо, чувак. Можете ли вы объяснить, почему вверху требуется функция where ()?
2. Потому что orWhere() вмешивается в другие условия на том же уровне. Вот почему мы перевели его на другой уровень состояния. Так что это работает только с условием whereHas(«категории»)….
3. В этом есть смысл, спасибо за объяснение