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)
)
);