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

Laravel中使用$with预加载模型关联时出现浏览器冻结超时问题

问题原因及解决办法

这是循环预加载引发的死循环。具体逻辑是:

  • 当加载User模型时,因为设置了protected $with = ['profile', 'subscription'];,会自动预加载关联的Profile
  • 而Profile模型又设置了protected $with = ['user'];,加载Profile时会自动预加载关联的User
  • 接着这个User又会再次触发预加载Profile,如此无限循环下去,直到服务器资源被耗尽,最终导致浏览器冻结、请求超时。

解决办法

  • 移除其中一个模型的自动预加载配置:比如删掉Profile模型里的protected $with = ['user'];,之后在需要同时获取Profile和User数据的场景,手动使用with()方法加载,例如Profile::with('user')->find($id);。
  • 如果业务上必须保留两边的自动预加载,可以在关联查询时通过setEagerLoads([])临时禁用预加载,或者在关联定义中添加条件限制,但这种方式复杂度较高,更推荐第一种方案,既简单又能避免不必要的性能浪费。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:55:56