首页  >  文章  >  后端开发  >  如何使用 Laravel Eloquent 检索表中每个唯一卖家的最新行?

如何使用 Laravel Eloquent 检索表中每个唯一卖家的最新行?

Linda Hamilton
Linda Hamilton原创
2024-10-25 14:57:02166浏览

How can I retrieve the latest row for each unique seller in a table using Laravel Eloquent?

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

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