使用 Laravel Eloquent 使用 Max Created_at 检索最新行
在 Laravel Eloquent 中,可以通过以下方式检索每个唯一字段的最新行全面的方法。在给定的跟踪销售的表中,其中每个条目都包含 id、seller_id、amount 和created_at 等字段,目标是检索每个不同 seller_id 的最新行。
检索最新行特定卖家的行
要获取特定卖家的最新行,Laravel Eloquent 提供了一种简单的方法:
<code class="php">$sales = Snapshot::where('seller_id', '=', 15) ->orderBy('created_at', 'DESC') ->first();</code>
此查询从 Snapshot 表中选择所有记录,其中seller_id 等于 15,根据created_at 按降序排列,并检索第一行,有效返回该卖家的最新销售。
检索每个卖家的最新行
扩展此方法以检索每个卖家的最新行需要更高级的策略。以下 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
在此查询中,子查询 s1 根据条件 s.created_at <🎜 选择记录。 s1.created_at,确保仅包含后续行具有较晚的created_at时间戳的记录。然后,外部查询会从主表中选择子查询中没有匹配行的所有行,从而有效隔离每个 seller_id 的最新记录。
在 Laravel Eloquent 中实现查询
要使用 Laravel Eloquent 实现此查询,可以利用查询构建器方法:
<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 查询的功能(s1) 标识每个 seller_id 后面的行。 whereNull 条件过滤掉具有后续行的行,只留下每个 seller_id 的最新记录。执行此查询将返回表中每个唯一卖家的最新销售额的集合。
以上是如何使用 Laravel Eloquent 检索表中每个唯一卖家的最新行?的详细内容。更多信息请关注PHP中文网其他相关文章!