Динамический запрос к реляционным таблицам

Это мой код:

$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 (жанры) не работает.

Книга — Жанры (отношения многие ко многим).

2

Решение

Если вы пытаетесь отфильтровать и найти только книги, относящиеся к определенному жанру, тогда

// 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 и указать условие внутри анонимной функции, как описано выше.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]