【问题标题】:Laravel select from DB where in Collection - Laravel NovaLaravel 从 DB where in Collection 中选择 - Laravel Nova
【发布时间】:2018-11-08 23:08:13
【问题描述】:

我有一个数据库,“视图”,有很多很多条目。我还有一个“课程”表,这些视图与该表是一对多相关的。在 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 可以有很多课程,也是一对多的关系。如何获取教师教授的所有课程的观看次数指标?

我认为最简单的方法是创建一个 Laravel 集合,其中包含教师教授的所有课程(效率不高),然后选择数据库中 viewable_id 与该列表中的课程之一匹配的所有视图.当然,通过发布这个,我无法弄清楚如何做到这一点。

当然,一旦解决了这个问题,我很乐意为 Categories 做同样的事情(尽管它的功能应该与教师非常相似,所以我不需要问这个问题)。

【问题讨论】:

    标签: php laravel laravel-nova


    【解决方案1】:

    如何获得教师教授的所有课程的观看次数指标?

    这应该是视图的“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)
      )
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-12
      • 2023-04-04
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 2019-07-29
      • 2013-12-25
      • 2016-09-27
      相关资源
      最近更新 更多