Как мне отфильтровать нетерпеливо загруженный класс?

#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(); « Большое спасибо, что указали мне правильное направление!