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

Laravel中find方法失效求助:如何让其正常返回指定ID数据

解决Laravel中find方法关联查询返回错误结果的问题

嘿,我来帮你捋清楚这个问题!你遇到的情况是因为调用方法的顺序错了,导致查询逻辑和你预期的不一样。

为什么第一段代码返回id=1的帖子?

你写的第一段代码:

public function edit($id) {
 $post = Post::find($id)->with(['comments'])->first();
 return $post;
}

这里的执行逻辑是这样的:

  1. Post::find($id) 已经立即执行了数据库查询,返回了id=12的Post模型实例。
  2. 接着调用with(['comments']),这时候是在这个已有的模型实例上准备预加载关联,但并没有改变当前的模型。
  3. 最后调用first(),这个方法会忽略之前的find($id)结果,直接重新查询Post表的第一条记录(也就是id=1的帖子),所以返回了错误的结果。

正确的写法有两种:

方式1:先预加载关联,再用find查询

把with()放在find()前面,这样是先构建完整的查询(包含预加载),再根据id获取对应的帖子:

public function edit($id) {
 $post = Post::with(['comments'])->find($id);
 return $post;
}

find($id)本身就会返回单个模型实例,不需要再调用first()了。

方式2:先查询模型,再延迟加载关联

如果你已经用find()获取了模型,想要加载关联的话,可以用load()方法(延迟加载):

public function edit($id) {
 $post = Post::find($id);
 $post->load(['comments']); // 加载关联
 return $post;
}

为什么第二段代码是对的?

你写的第二段代码:

public function edit($id) {
 $post = Post::where('id', $id)->with(['autor'])->first();
 return $post;
}

这里的逻辑是先构建查询链:添加where条件、添加预加载关联,最后调用first()执行查询,自然会返回符合id=12的帖子,所以结果正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:59:24