时间:2011-08-04 09:53:32

标签: orm doctrine doctrine-orm datamapper entitymanager

我有我想要加载的实体,以及其他偶像加载懒惰(甚至是额外的懒惰)。

我的映射在我的YAML中没有声明获取模式 - 因此它们使用默认值(延迟加载)。

目前,热切加载的唯一方法是手动构建DQL - 每次添加新实体时都需要更新它。

理想情况下,我只需加载根实体并强制加载所有关联对象。我有什么方法可以做到这一点吗?

如果不是为什么(除了它是否有一个未实现的功能之外的原因)?

2 个答案:

答案 0 :(得分:22)

如果你想使用内置的存储库方法(find(),findAll()),除非你急切地加载注释,否则你可能会运气不好。

您可能希望在某些自定义存储库的方法中使用查询构建器(或原始DQL)来强制在您希望的位置加载。是的,你必须在添加实体时更新该方法,但至少你总是知道在懒惰/急切加载方面发生了什么,你只需要在一个地方维护它。

我认为没有一些$ eagerLoad标志来查找()等的原因是因为这些是简单任务的便捷方法。如果你想添加这样一个标志,你很快就会陷入需要通过深度限制递归预加载的情况。你也可能不得不开始担心周期性引用(例如任何双向关联)。

答案 1 :(得分:22)