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
相关产品推荐
相关产品推荐

