Это мой код:
$query = Book::query();
if (isset($input['alphabet']))
$query->where('name', 'LIKE', $input['alphabet'] . '%');
if (isset($input['status']))
$query->where('status', $input['status']);
if (isset($input['genre']))
$query->with(array('genres' => function($q) use($input) {
$q->where('genres.id', $input['genre']);
}));
Я хочу получить все книги с name LIKE .... and status = ....
Запросы 1 и 2 (имя, статус) в порядке. Но запрос 3 (жанры) не работает.
Книга — Жанры (отношения многие ко многим).
Если вы пытаетесь отфильтровать и найти только книги, относящиеся к определенному жанру, тогда
// Filters and finds only the books that have the particular genre
whereHas('genres', function($q) use ($input)
{
$q->where('genres.id', '=', $input['genre']));
});
‘with’ не ставит условий на книги, но используется для быстрой загрузки. Если вы хотите отфильтровать книги в зависимости от того, принадлежит ли он к определенному жанру, вам следует использовать whereHas и указать условие внутри анонимной функции, как описано выше.
Других решений пока нет …