我有两个表,分别是Shows和Episodes,每个情节都有show_id,将它们一对多链接。
现在我需要获取最新的6集,每个节目一个,其中show.active是真的
我尝试了以下代码:
$episodes = Episode::select(DB::raw('t.*'))
->from(DB::raw('(SELECT * FROM episodes ORDER BY id DESC) t'))
->whereHas('show', function($query) {
$query->where('active', '=', true);
})
->groupBy('t.show_id')
->take(6)
->get();
不幸的是,我得到以下信息:
找不到列:1054'where子句'中的未知列'episodes.show_id'(SQL:从(SELECT * FROM Episodes OR ID BY DESC)中选择t。*从(shows
中选择*其中episodes
。show_id
= shows
。id
和active
= 1)按t
分组。show_id
限制6)< / p>
我也尝试过:
$episodes = Episode::where('active', true)
->orderBy('id', 'DESC')
->whereHas('show', function($query) {
$query->where('active', '=', true);
})
->groupBy('show_id')
->take(6)
->get();
它没有显示错误,但没有返回每个节目的最新消息,groupBy得到第一条记录,我需要最新记录
答案 0 :(得分:0)
这应该有效:
$episodes = Episode::where('active', true)
->whereHas('show', function($query) {
$query->where('active', '=', true);
})
->groupBy('show_id')
->orderBy('id', 'DESC')
->take(6)
->get();
答案 1 :(得分:0)
您可以尝试
$episodes = Episode::selectRaw('max(id) as id, show_id')
->whereHas('show', function($query) {
$query->where('active', '=', true);
})
->orderBy('id', 'DESC')
->groupBy('show_id')
->take(6)
->get();
答案 2 :(得分:0)
您可以使用WHERE IN
子查询:
$ids = Episode::selectRaw('max(id)')
->whereHas('show', function ($query) {
$query->where('active', '=', true);
})->groupBy('show_id');
$episodes = Episode::whereIn('id', $ids)
->take(6)
->get();