在 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中文网其他相关文章!