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

Laravel Eloquent预加载两种with写法哪种更高效?是否有差异?

Laravel Eloquent预加载两种写法的效率对比

嘿,这个问题问得很到位!其实这两种写法在执行效率和最终结果上完全没有任何差异——Laravel的Eloquent底层会帮你处理多次with()调用的参数,最终合并成同一个预加载关系列表,生成的SQL查询完全一致。

具体原因:

  • Eloquent的with()方法内部维护了一个预加载关系的数组,每次调用with()时,不管你是传入单个关系、多个关系的数组,还是连续多次调用,它都会把所有传入的关系追加到这个数组里(如果重复传同一个关系,也只会加载一次)。
  • 两种写法最终都会执行完全相同的查询流程:
    1. 先执行主查询获取Model的第一条数据
    2. 批量查询relationship关联数据
    3. 基于relationship的ID批量查询relationship.content
    4. 批量查询meta关联数据
    5. 基于meta的ID批量查询meta.meta_type
      总共5次查询,两种写法的查询次数、SQL语句完全一致。

额外小技巧:

其实你还可以进一步简化写法,用嵌套关系的点语法一次性写完,效果也完全一样:

$data = Model::with('relationship.content', 'meta.meta_type')->first();

这样代码更简洁,可读性也不差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:50:19