如何解决Laravel按类别ID分类的最新新闻
我正在尝试按类别ID归纳最新新闻。
示例数据:
+----+--------+-------------+-------------------------+-------------------------+
| id | title | category_id | created_at | updated_at |
+----+--------+-------------+-------------------------+-------------------------+
| 1 | Item 1 | 1 | 2020-08-01 12:00:00.000 | 2020-08-01 12:00:00.000 |
| 2 | Item 2 | 2 | 2020-08-02 12:00:00.000 | 2020-08-02 12:00:00.000 |
| 3 | Item 3 | 4 | 2020-08-02 12:00:00.000 | 2020-08-02 12:00:00.000 |
| 4 | Item 4 | 1 | 2020-08-04 12:00:00.000 | 2020-08-04 12:00:00.000 |
| 5 | Item 5 | 2 | 2020-08-11 12:00:00.000 | 2020-08-11 12:00:00.000 |
+----+--------+-------------+-------------------------+-------------------------+
我想要输出:
+----+--------+-------------+-------------------------+-------------------------+
| id | title | category_id | created_at | updated_at |
+----+--------+-------------+-------------------------+-------------------------+
| 3 | Item 3 | 4 | 2020-08-02 12:00:00.000 | 2020-08-02 12:00:00.000 |
| 4 | Item 4 | 1 | 2020-08-04 12:00:00.000 | 2020-08-04 12:00:00.000 |
| 5 | Item 5 | 2 | 2020-08-11 12:00:00.000 | 2020-08-11 12:00:00.000 |
+----+--------+-------------+-------------------------+-------------------------+
使用Laravel Eloquent是否有一种简便的方法?
解决方法
您将需要自动加入新闻列表,以选择每个类别的最新新闻,例如
select n.*
from news n
left join news n1 on n.category_id = n1.category_id
and n.created_at < n1.created_at
where n1.category_id is null
使用查询生成器,您可以将其重写为
DB::table('news as n')
->select('n.*')
->leftJoin('news as n1',function ($join) {
$join->on('n.category_id','=','n1.category_id')
->whereRaw(DB::raw('n.created_at < n1.created_at'));
})
->whereNull('n1.category_id')
->get();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。