Laravel выбрать из БД, где в коллекции - Laravel Nova - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть БД, "просмотры", со многими, многими записями.У меня также есть таблица «Курсы», с которой связаны эти представления.В 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 Ответ

0 голосов
/ 09 ноября 2018

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

Это должны быть "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)
  )
);
...