You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9中如何获取数据库最新记录?

Laravel 9 获取关联模型最新记录的正确方式

旧代码的问题分析

你之前的代码错误在于直接操作了关联集合(Auth::user()->files),而非查询构造器(Auth::user()->files())。集合的方法与查询构造器的方法逻辑、用法完全不同,导致旧写法失效:

  • ->files->latest:集合的latest()方法需要指定字段,且是在内存中处理数据,不是数据库层面排序
  • order_By是拼写错误,正确写法为orderBy,但同样用在集合上无法实现数据库层面的排序
  • ->files->latest('id')->first():集合的first()只是取集合第一条,并非数据库查询后的最新记录

正确实现方式

1. 获取单条最新记录

如果要获取当前用户关联的files表中最新的一条记录,使用查询构造器操作:

$picture = Auth::user()->files()->latest('id')->first();
  • ->files():返回关联查询构造器,允许在数据库层面构建查询
  • latest('id'):按id字段倒序排序(Laravel默认按created_at排序,指定id则按id倒序)
  • first():取排序后的第一条记录,即最新的那条

2. 分组后获取每组最新记录

如果需要按某字段分组,获取每组的最新记录,可以用子查询实现:

$pictures = Auth::user()->files()
    ->select('*')
    ->whereIn('id', function($query) {
        $query->selectRaw('MAX(id)')
              ->from('files')
              ->whereColumn('user_id', 'files.user_id')
              ->groupBy('分组字段'); // 替换为实际需要分组的字段名
    })
    ->get();

通过子查询先筛选出每组的最大id,再根据这些id获取对应记录,确保拿到的是每组的最新数据。

内容的提问来源于stack exchange,提问作者Jac Phillipps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:05:14