我正在使用Doctrine 2来绘制学术日程.以下是关系的简化介绍:
使用$em->find()我只能使用延迟加载的关系来获取类.或者使用带有连接的DQL,我可以急切地加载整个对象图.是否存在介于两者之间的解决方案?
我想获取一个具有延迟加载关系的类,然后在某些条件下触发事件关系和所有事件属性的急切加载.因此,当我调用类似的东西时$class->getEventsHydrateAll(),所有事件和事件类型以及事件位置将立即被水合.
我想我可以通过更新我的事件模式来标记类型和位置关系来实现这一点fetch="EAGER".但我想控制这种深度水合作用何时发生.
这是我在类库中进行的一次尝试,但是Doctrine正在运行单独的查询来查找每种类型和位置.
$query = $this->_em->createQuery('
SELECT c FROM My\Entity\Class c
WHERE c.id = :classId
');
$query->setParameter('classId', $classId)
->setFetchMode('My\Entity\Event', 'type', 'EAGER')
->setFetchMode('My\Entity\Event', 'location', 'EAGER');
try {
return $query->getSingleResult();
} catch …Run Code Online (Sandbox Code Playgroud)