Laravel выберите из БД, где в коллекции - Laravel Nova

У меня есть БД, "просмотры", со многими, многими записями. У меня также есть таблица "Курсы", с которой связаны эти представления. В Laravel Nova я могу получить метрику всех просмотров по времени для курса с помощью следующего кода:

public function calculate(Request $request)
{
    return $this->countByDays($request, view::where('viewable_id', $request->resourceId));
}

В этом случае, viewable_id это идентификатор курса, и $request->resourceId дает идентификатор курса для сортировки. Довольно просто

Однако сейчас все становится немного сложнее. У меня есть другая модель под названием Teachers, каждый Teacher может иметь много курсов, также в отношениях один-много. Как получить метрику мнений по всем курсам, которые преподает учитель?

Я предположил, что самый простой способ сделать это - создать Коллекцию Laravel со всеми курсами, которые преподает Учитель (не совсем эффективный), а затем выбрать все представления в базе данных, где viewable_id соответствует одному из курсов в этом списке. Конечно, публикуя это, я не мог понять, как это сделать.

Конечно, как только это выяснится, я бы хотел сделать то же самое для Categories (хотя это должно работать очень идентично Учителям, поэтому мне не нужно задавать этот вопрос).

1 ответ

Решение

Как получить метрику мнений по всем курсам, которые преподает учитель?

Это должно быть "countByDays" представлений, где viewable_id находится в списке идентификаторов курсов, которым учит учитель.

Инструкция SQL-запроса для достижения этой цели приведена ниже:

select * from "views" 
where "viewable_id" in (select "id" from "courses" where "teacher_id" = ?)

Запрос Eloquent должен быть похож на:

$this->countByDays($request,
  view::whereIn(
    'viewable_id',
     Course::with('teacher')
             ->select('id')
             ->where('teacher_id', $request->resourceId)
  )
);
Другие вопросы по тегам