postLoad实体与关联没有延迟加载?

时间:2015-10-23 16:13:02

标签: symfony doctrine-orm

这是我的pb。

我有一个实体游戏和一个实体控制台 它是 ManyToMany 关联。

为了获得更高的性能,我在同一个查询中加载游戏和控制台:

$this->_em->getRepository('MyBundle:Console')
        ->createQueryBuilder('console')
        ->join('console.game', 'game')
        ->select('game', 'console')
        ->getQuery()->getResult();

当我使用$console->getGames()显示所有游戏而不执行任何查询时

当我使用 postLoad事件时,每个$console->getGames()执行查询,因为事件在对象完全水合之前开始。

在学说网站上,我发现了这个建议:

  

"注意,当使用Doctrine \ ORM \ AbstractQuery#iterate()时,postLoad   物体在水合后立即执行,   因此不保证协会的初始化。它是   结合使用Doctrine \ ORM \ AbstractQuery#iterate()和   postLoad事件处理程序。"

那么,有人知道如何使用 postLoad事件与完整的水合实体?我不想要懒惰。

但这不是我的理由

1 个答案:

答案 0 :(得分:1)

在Doctrine 2.5中,这种行为实际上已经发生了变化。从2.5开始,所有关联都应该在postLoad事件中加载。 Doctrine 2.5应该解决你的问题,参考:

http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/changelog/migration_2_5.html#events-postload-now-triggered-after-associations-are-loaded