首页 > 数据库 > mysql教程 > 如何在 Laravel Eloquent 中检索每个唯一值的最新记录?

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

Linda Hamilton
发布: 2024-12-01 06:34:13
原创
432 人浏览过

How to Retrieve the Most Recent Record for Each Unique Value in Laravel Eloquent?

使用 Laravel Eloquent 查询最新记录

要检索给定表列中每个唯一值的最新记录,Laravel 的 Eloquent ORM提供了一个强大的解决方案。让我们看一下一个场景及其雄辩的解决方案:

场景:

考虑一个名为“snapshot”的表,其中包含“id”、“seller_id”、“金额”和“创建时间”。目标是检索每个不同“seller_id”的最新行。

雄辩查询:

$latestSales = Snapshot::select('seller_id')
    ->groupBy('seller_id')
    ->havingRaw('MAX(created_at)')
    ->orderBy('created_at', 'DESC')
    ->get();
登录后复制

解释:

  • groupBy('seller_id'):对结果进行分组基于“seller_id”列,将具有匹配卖家 ID 的行组织在一起。
  • havingRaw('MAX(created_at)'):过滤结果以仅包含每个卖家中具有最大“created_at”值的行ID 组。
  • orderBy('created_at', 'DESC'):按降序对每个卖家 ID 组内的结果进行排序“created_at”,确保最新记录最先出现。
  • get():从数据库中获取结果。

备用查询(原始查询):

如果愿意,可以使用原始 SQL 查询来实现相同的效果结果:

SELECT * FROM snapshot
WHERE (seller_id, created_at) IN (
    SELECT seller_id, MAX(created_at) AS max_created_at
    FROM snapshot
    GROUP BY seller_id
)
ORDER BY created_at DESC;
登录后复制

此查询使用子查询标识每个“seller_id”的最新行,以确定每个组内的最大“created_at”值。然后选择具有匹配的“seller_id”和“created_at”对(代表最新记录)的行,并按“created_at”降序排序,从而得到每个卖家的最新记录列表。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板