小编Wim*_*mer的帖子

学说:渴望加载懒惰关系的关系?

我正在使用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)

php orm doctrine lazy-loading doctrine-orm

6
推荐指数
2
解决办法
5246
查看次数

标签 统计

doctrine ×1

doctrine-orm ×1

lazy-loading ×1

orm ×1

php ×1