Как указал @Makdous, существуют различные подходы, вы можете выбрать тот, который соответствует вашим потребностям.
Обратите внимание, что подход l oop может привести к дублированию книг, поэтому после l oop вы придется удалить дубликаты записей.
Чтобы избежать этой проблемы, одним из решений будет прямой запрос модели книги:
$categoryIds = $user->subscriptions(category_b::class)->pluck('id');
$books = book::whereHas('getCategory', function ($q) use ($categoryIds) {
return $q->whereIn('categoryb.id', $categoryIds);
})
->get();
РЕДАКТИРОВАТЬ:
Вы можете go кроме этого, улучшите читабельность своего кода, определив локальную область действия .
В классе Book:
class book extends Model
{
// .....
// .....
// Somewhere in your Book class ...
public function scopeOfCategories($query, $categoryIds = [])
{
return $query->whereHas('getCategory', function ($q) use
($categoryIds) {
return $q->whereIn('categoryb.id', $categoryIds);
});
}
}
Теперь вы можете заменить старый фрагмент кода со следующим:
$categoryIds = $user->subscriptions(category_b::class)->pluck('id');
$books = book::ofCategories($categoryIds)->get();