orm - 在 Doctrine 2 中,可以在运行时更改获取模式(Eager/Lazy 等)吗?

标签 orm doctrine doctrine-orm datamapper entitymanager

我有我想急切加载的实体,并在其他情况下懒惰(甚至额外懒惰)加载。

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

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

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

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

最佳答案

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

您可能希望在某些自定义存储库的方法中使用查询构建器(或原始 DQL)来强制预先加载到您想要的位置。是的,您必须在添加实体时更新该方法,但至少您将始终知道关于延迟/急切加载的情况,并且您只需要在一个地方维护所有这些。

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

关于orm - 在 Doctrine 2 中,可以在运行时更改获取模式(Eager/Lazy 等)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6939339/

相关文章:

doctrine-orm - 原则 2 不创建外键

mysql - 如何让 Doctrine 2 以字符串形式返回 DateTime?

c# - 使用 Dapper 点网映射域实体的私有(private)属性

php - 将 Doctrine 与 Zend Framework 1.8 应用程序集成

php - 如何使用一对多、双向 Doctrine ?

php - 当数据库离线时 symfony 会发生什么?

mysql - Doctrine 具有不同结果的多对多关系查询

django - 如何在 django ORM 中按年和月对事件进行分组?

python - SQLAlchemy 使用复合外键连接(使用flask-sqlalchemy)

java - org.hibernate.MappingException:无法确定类型:java.util.List,在表:College,用于列:[org.hibernate.mapping.Column(students)]