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

Laravel Eloquent关联仅首次执行查询的异常现象及原因咨询

这是完全正常的现象!

你遇到的情况是Eloquent的关联结果缓存特性在起作用,具体原因如下:

当你第一次访问$book->position时,Eloquent会执行对应的SQL查询获取关联的Position数据,同时会把这个查询结果缓存到当前$book模型实例的内部属性中。后续只要你还是操作同一个$book实例,再访问position关联时,Eloquent就会直接返回缓存好的数据,不会再去数据库发起新的查询了。

对应到你的代码里:你在循环外就已经获取了$book实例,整个while循环都是复用这个实例,所以第一次循环触发了数据库查询,后面两次循环直接读取缓存,自然不会产生新的SQL日志。

如果你的业务场景需要每次循环都重新查询最新的关联数据,可以用以下几种方式实现:

  • 每次调用关联查询构造器执行查询:$position = $book->position()->first()->name;,这种方式每次都会发起新的数据库请求
  • 先清除实例的关联缓存,再访问关联:
    $book->unsetRelation('position');
    $position = $book->position->name;
    
  • 刷新整个模型并重新加载关联:$freshBook = $book->fresh('position'); $position = $freshBook->position->name;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:55:48