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
相关产品推荐
相关产品推荐

