#laravel #controller #eager-loading
#laravel #контроллер #нетерпеливая загрузка
Вопрос:
У меня есть класс category, и я вызываю все события внутри этого класса с нетерпеливой загрузкой. Однако я хочу показывать только те события, которые были одобрены. Я использую show controller в Laravel.
Я смог отфильтровать класс category с помощью wherehas (), но я не могу понять, как отфильтровать результат класса нетерпеливо загруженных событий.
public function show(Category $category)
{
$cat = $category->with('events')->get();
return $cat;
return view('category.show', compact('cat'));
}
Как я уже сказал, я смог отфильтровать категорию, но как мне отправить по категории события, для которых утверждено = 1 вместо null?
Ответ №1:
Вы можете передать обратный вызов функции with, которая фильтрует запрос.
$cat = $category->with(['events' => function ($q) {
$q->where('approved', 1);
}]
)->get();
Комментарии:
1. Это сработало до некоторой степени, за исключением того, что теперь в нем перечислены все мои категории. Я еще немного поиграл с ним и заставил это работать « $category-> load([‘events’ => function ($query) { $query-> whereNotNull(‘approved’); }])->get(); « Большое спасибо, что указали мне правильное направление!