Orm 在原则2中,获取模式(急切/懒惰等)能否在运行时更改?

Orm 在原则2中,获取模式(急切/懒惰等)能否在运行时更改?,orm,doctrine,doctrine-orm,datamapper,entitymanager,Orm,Doctrine,Doctrine Orm,Datamapper,Entitymanager,我有一些我想急切加载的实体,而在其他ocassion上则是惰性(甚至是额外的惰性)加载 我的映射在YAML中没有声明fetch模式,因此它们使用默认模式(延迟加载) 目前,渴望加载的唯一方法是手动构建DQL,每次添加新实体时,我都需要更新DQL 理想情况下,我只需加载根实体,并加载所有关联对象。我有什么办法可以做到这一点吗 如果不是为什么(除了它是一个未实现的特性之外还有其他原因吗)?如果您想使用内置的存储库方法(find(),findAll()),除非您将内容设置为急切地加载到注释中,否则您可

我有一些我想急切加载的实体,而在其他ocassion上则是惰性(甚至是额外的惰性)加载

我的映射在YAML中没有声明fetch模式,因此它们使用默认模式(延迟加载)

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

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


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

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

您可能希望在某个自定义存储库的方法中使用查询生成器(或原始DQL)来强制在需要的地方加载。是的,您必须在添加实体时更新该方法,但至少您总是知道延迟/急切加载的情况,并且您只需要在一个地方维护它


我想找不到$eangerload标志()等的原因是因为这些都是简单任务的方便方法。如果您想添加这样一个标志,那么您很快就会陷入这样一种情况,即您希望通过深度限制递归加载。您可能还必须开始担心循环引用(例如,任何双向关联)。

您可以使用DQL的
setFetchMode()
方法来设置模式

请参阅文档:

谢谢您的回复。如果还有其他人想发表意见,我会把这个问题打开一段时间。请记住在
addSelect('alias')
中添加所有联接表别名,以便在结果中包含关联实体。请注意,它只能用于多对一和一对一关联,因为我刚刚浪费了2个小时,在setFetchMode中,第一个参数必须引用当前类,而不是我们想要延迟或急切获取的类。并且类必须指示为AppBundle\Entity\Student(如示例显示它)2小时?算我两天!这在Symfony中是多么令人讨厌:/@Sliq这是信条,而不是Symfony链接似乎太旧了。对于条令2.5,我必须使用:
$query->setFetchMode(MyOriginalParent::class,“parents\u alias\u used\u in\u query”,条令\ORM\Mapping\ClassMetadata::FETCH\u LAZY)以使其惰性运行(对于已经迫切需要设置的实体)