【发布时间】:2021-05-12 06:37:57
【问题描述】:
我对这个数据库查询摸不着头脑,不知道为什么它不起作用。
如果我直接在plays 表上尝试它确实有效:
Play::select(\DB::raw('COUNT(*) as plays'), \DB::raw('DATE(created_at) as date'))
->whereDate('created_at', '>', Carbon::now()->subWeek())
->groupBy('date')->orderBy('date')->get();
// returns the expected results
但是,当我尝试在关系函数中使用它时它不起作用(返回空数组,而实际上有数据):
$artist->songs()->with(['plays' => function($q){
$q->select(\DB::raw('COUNT(*) as plays'), \DB::raw('DATE(created_at) as date'))
->whereDate('created_at', '>', Carbon::now()->subWeek())
->groupBy('date')->orderBy('date');
}])->get()->pluck('plays')->toArray();
注意:$artist->songs()->with('plays')->get()返回预期结果
【问题讨论】:
-
这是什么关系类型?多对多?
-
@apokryfos 不,艺术家有很多歌曲 |歌曲属于艺术家 |歌曲有很多次播放
-
为了使急切加载关系起作用,您需要在基于关系逻辑的急切加载逻辑上具有父或子的 id。由于您在关系逻辑上有一个特定的
select而没有song_id,因此它将不起作用,(而且我认为您不能在 group by 上选择 id)如果您在没有 groupBy 的情况下获取播放并将其分组会更好关于检索到的集合