пользователи с разными ролями, для которых содержимое одной и той же страницы может кардинально отличаться
foreach ($tagIds as $id) {
$booksQuery->whereHas('tags', function ($q) use ($id) {
$q->where('id', $id);
});
}
$booksQuery->whereDoesntHave('tags', function ($q) use ($tagIds) {
$q->whereNotIn('id', $tagIds);
});
$books = $booksQuery->get();