我有我想急切加载的实体,并在其他情况下懒惰(甚至额外懒惰)加载。
我的映射在我的 YAML 中没有声明获取模式 - 所以它们使用默认值(延迟加载)。
目前,急切加载的唯一方法是手动构建 DQL - 我每次添加新实体时都需要更新它。
理想情况下,我只会加载根实体并强制加载所有关联的对象。有什么办法可以做到这一点吗?
如果不是为什么(除了它是未实现的功能之外还有其他原因吗)?
最佳答案
如果您想使用内置的存储库方法(find()、findAll()),除非您将内容设置为在注释中急切加载,否则您可能不走运。
您可能希望在某些自定义存储库的方法中使用查询构建器(或原始 DQL)来强制预先加载到您想要的位置。是的,您必须在添加实体时更新该方法,但至少您将始终知道关于延迟/急切加载的情况,并且您只需要在一个地方维护所有这些。
我想 find() 等没有一些 $eagerLoad 标志的原因是因为这些是简单任务的便捷方法。如果您想添加这样的标志,您很快就会进入需要按深度限制递归预加载的情况。您可能还必须开始担心循环引用(例如,任何双向关联)。
关于orm - 在 Doctrine 2 中,可以在运行时更改获取模式(Eager/Lazy 等)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6939339/