Laravel嵌套关联查询报错:Call to a member function addEagerConstraints() on null
问题原因与解决方法
你的错误根源是OrderItem模型中的关联方法没有返回关联实例。在Laravel中,定义关联关系的方法必须返回hasOne/hasMany等关联对象,否则调用关联时会返回null,进而导致addEagerConstraints()调用失败。
修正后的代码
OrderItem模型
public function embroidery() { return $this->hasOne(Embroidery::class); // 补充return语句 } public function pattern() { return $this->hasOne(Pattern::class); // 补充return语句 }
报错逻辑说明
当你执行Order::with('items.embroidery')时,Laravel会按步骤预加载嵌套关联:
- 先获取目标Order及其关联的items集合
- 尝试对所有items批量加载embroidery关联
但因为你的embroidery方法没有返回关联对象,返回值为null,Laravel无法调用关联对象的addEagerConstraints()方法构建预加载查询,因此抛出错误。
修正后重新执行Order::with('items.embroidery')->first(),即可正常获取嵌套关联数据。
内容的提问来源于stack exchange,提问作者Udders
相关产品推荐
相关产品推荐

