laravel - 从具有父关系条件的子项中选择唯一记录
问题描述
我有两张表,节目和剧集,每集都有 show_id 将它们一对多链接起来。
现在我需要获取最新的 6 集,每集一集,其中 show.active 为 true
我试过以下代码:
$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 t.* from (SELECT * FROM episodes ORDER BY id DESC) t where exists (select * from shows
where episodes
. show_id
= shows
. id
and active
= 1)分组依据t
.show_id
限制 6)
我也试过:
$episodes = Episode::where('active', true)
->orderBy('id', 'DESC')
->whereHas('show', function($query) {
$query->where('active', '=', true);
})
->groupBy('show_id')
->take(6)
->get();
它显示没有错误,但不返回每个节目的最新记录,groupBy 获得第一条记录,我需要最新的
解决方案
你可以试试这个
$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();
推荐阅读
- javascript - 在 react native expo 中使用 flex 将同一行上的 2 张卡片与动态内容对齐
- javascript - Vuejs 组合 API - 属性更改
- django - Django 媒体图像显示空白框
- ruby-on-rails - 升级到 Rails 6 后:Content-Disposition 标头现在添加了奇怪的文件名*=UTF-8
- azure-cli - 是否有任何系统方法可以找到每个 Azure CLI 命令所需的最低访问权限或角色?
- javascript - 使用 API 渲染数据
- sql - SQL 中的高效(线性时间)嵌套查询
- python - 构建数据矩阵时如何处理“索引越界”?
- anaconda - conda-forge 存储库是否需要 Anaconda 商业版许可证?
- php - Google Big Query insertAll() 返回成功结果,但表为空