首页 >后端开发 >php教程 >如何使用 Laravel Eloquent 检索列中每个唯一值的最新记录?

如何使用 Laravel Eloquent 检索列中每个唯一值的最新记录?

Susan Sarandon
Susan Sarandon原创
2024-10-26 12:55:02783浏览

How to Retrieve the Latest Records for Each Unique Value in a Column using Laravel Eloquent?

如何在 Laravel Eloquent 中获取具有 Max Created_at 的所有行

在 Laravel 的 Eloquent ORM 中,您可能会遇到需要为每个不同值检索最新行的场景在特定的列中。这可以通过使用子查询和聚合函数的组合来实现。

考虑一个场景,您有一个包含以下列的数据库表:

id  seller_id   amount   created_at

假设您想要获取最新的记录每个唯一的 seller_id。以下是使用原始 SQL 查询完成此操作的方法:

<code class="sql">select s.*
from snapshot s
left join snapshot s1 on s.seller_id = s1.seller_id
and s.created_at < s1.created_at
where s1.seller_id is null

在此查询中,我们利用左联接将快照表中的每条记录(别名为 s)与具有相同条件的所有其他记录进行比较卖家_id。然后,我们使用 AND 条件过滤掉 s.created_at 小于 s1.created_at 的记录。最后,我们包含一个 WHERE 子句来排除右表 (s1) 中具有匹配 seller_id 的任何记录,从而有效地隔离每个 seller_id 的最新记录。

要使用 Laravel 查询生成器获得相同的结果,您可以执行以下代码:

<code class="php">DB::table('snapshot as s')
  ->select('s.*')
  ->leftJoin('snapshot as s1', function ($join) {
        $join->on('s.seller_id', '=', 's1.seller_id')
             ->whereRaw(DB::raw('s.created_at < s1.created_at'));
   })
  ->whereNull('s1.seller_id')
  ->get();</code>

此查询构建器方法镜像原始 SQL 查询的逻辑,将其封装在 Laravel 的流畅界面中。它返回快照表中存在的每个不同 seller_id 的最新记录的集合。

以上是如何使用 Laravel Eloquent 检索列中每个唯一值的最新记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn