Laravel select 来自数据库 Collection - Laravel Nova

Laravel select from DB where in Collection - Laravel Nova

我有一个数据库,"views," 有很多很多条目。我还有一个 "Courses" table,这些视图与 one-many 相关。在 Laravel Nova 中,我可以使用如下代码获取一门课程随时间推移的所有观看次数的指标:

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

在这种情况下,viewable_id 是课程的 ID,$request->resourceId 给出了要排序的课程 ID。很简单。

然而,现在事情变得有点困难了。我有另一个模型叫做 Teachers。每个Teacher可以有很多门课程,也是one-many关系。我如何获取教师教授的所有课程随时间推移的观看次数指标?

我假设最简单的方法是创建一个 Laravel Collection 包含教师教授的所有课程(效率不高),然后 select 中的所有视图viewable_id 与该列表中的一门课程相匹配的数据库。当然,通过发布这个,我不知道该怎么做。

当然,一旦弄清楚了,我很乐意为 Categories 做同样的事情(尽管这应该以与教师完全相同的方式运作,所以我不需要问那个问题)。

How do I get a metric of views over time for all the courses that teacher teaches?

这应该是 "countByDays" 的视图,其中 viewable_id 在老师教授的课程 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)
  )
);