У меня есть 3 таблицы
Книги --> id, название книги
Теги --> id, название тега
книга_тег --> id_книги, id_тега
Книга может иметь много тегов и наоборот тег может иметь много книг (многие-ко-многим) связь. Я хочу организовать поиск таким образом, чтобы выдавались книги только те, что указаны в поиске. Например, в поиске я ищу книги с тегами: комедия и боевик. И поисковый запрос мне выдавал только лишь книги с этими тегами. Чтобы не выдавались книги, которые имеют теги: комедия, боевик и еще какие-то теги.
Я пытался организовать это с помощью WhereIn, однако ничего не получилось, так как как раз в поисковый запрос включаются книги, которые кроме тех поисковых тегов имеют еще дополнительные. Например, я ищу книги с тегами: детектив, комедия, а в поисковый ответ включаются еще книги, которые имеют теги: детектив,комедия,триллер,боевик. То есть, включатся книги, которые кроме поисковых еще имеют дополнительные, что мне не нужно. Вот, что я пытался сделать (однако неудачно, так как дополнительные книги включаются)
foreach ($tags as $tag) {
if ($request->has($tag->tag))
$filteredTags[] = $tag->id;
}
if ($filteredTags != null) {
$booksQuery->whereHas('tags', function ($q) use ($filteredTags) {
$q->whereIn('id',$filteredTags);
});
}