这是我的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事件与完整的水合实体?我不想要懒惰。
但这不是我的理由
答案 0 :(得分:1)
在Doctrine 2.5中,这种行为实际上已经发生了变化。从2.5开始,所有关联都应该在postLoad事件中加载。 Doctrine 2.5应该解决你的问题,参考: