【发布时间】:2015-10-23 16:13:01
【问题描述】:
这是我的 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 事件 与完整的水合实体一起使用吗?我不想延迟加载。
但这不是我的情况
【问题讨论】:
-
不清楚你的问题是什么
-
对不起,我编辑了我的帖子:所以,有人知道如何将 postLoad 事件与完整的水合实体一起使用吗?
-
首先将 ->select('console,game') 添加到您的查询中,因为按照当前编写的方式,您的查询仍然延迟加载游戏。然后也许用一个问题来更新你的问题。
-
我忘记将选择添加到帖子中,但我已将其添加到我的项目中
-
这就是 postLoad 的工作方式。您必须遍历结果并发送您自己的事件。
标签: symfony doctrine-orm