我有一些我想热切加载的实体,在其他场合则需要延迟(甚至是额外的延迟)加载。

我的映射在我的YAML中没有声明任何提取模式,因此它们使用默认设置(延迟加载)。

当前,迫切需要加载的唯一方法是手动构建DQL-每次添加新实体时,我都需要对其进行更新。

理想情况下,我只加载根实体,然后急于加载所有关联的对象。有什么办法可以做到吗?

如果不是,为什么(除了未实现的功能,还有其他原因)吗?

最佳答案

如果要使用内置的存储库方法(find(),findAll()),除非您将内容设置为急切地加载到批注中,否则您可能不走运。

您可能需要在某些自定义存储库的方法中使用查询生成器(或原始DQL)来强制在需要的位置进行快速加载。是的,您在添加实体时必须更新该方法,但是至少您将始终了解延迟/急切加载的情况,并且只需要将其全部保存在一个位置即可。

我想之所以没有find()等$ eagerLoad标志的原因是因为这些是用于简单任务的便捷方法。如果您想添加这样的标志,那么您将很快陷入想要按深度限制递归紧急加载的情况。您可能还必须开始担心循环引用(例如,任何双向关联)。

07-27 21:39