编辑:如果您遇到类似的问题This Topic将会引起您的兴趣
我有一对一的双向关系的User和UserSettings。看来即使我在我的页面中没有使用任何UserSettings值,学说懒惰也会加载它。
这是预期的行为吗?为什么Doctrine获取这些数据,即使我没有在我的页面中使用它?如果我无法阻止它,我每次检索用户对象时都必须将此UserSettings加入User,但这是不必要的。
我该怎么做才能防止这种情况发生?
加载数据的代码:
->createQuery('SELECT p, u, s FROM TestPostBundle:Post p LEFT JOIN p.user u LEFT JOIN p.sub s WHERE p.id IN (:ids)')
->setParameter('ids', $ids)
->getResult();
在twig我循环浏览帖子并显示Post数据和相关用户,但我从未请求任何UserSettings变量,我根本不访问它们。
答案 0 :(得分:4)
我在几个地方看过这个问题,并在这里添加我的答案:
我遇到了同样的问题,并记住symblog教程给出了一个示例,说明如何通过在不需要的表上显式添加左连接来减少延迟加载。当你根本不想要那些数据时,在连接中包含表格似乎很奇怪,但是这样你就可以将所有额外的查询减少到1并且运行得更快。
搜索延迟加载 - 约为http://tutorial.symblog.co.uk/docs/customising-the-view-more-with-twig.html
的1/5要解决用户/用户数据问题,请尝试将其添加到用户存储库,即使您不需要userdata,也可以在需要获取所有用户时使用。可以通过选择部分进一步增强: - > select('partial p。{user_id,name,}')
public function getAll($limit = 500) {
$qb = $this->createQueryBuilder('u')
->select('u', 'd')
->leftJoin('p.userdata', 'd')
if (false === is_null($limit))
$qb->setMaxResults($limit);
return $qb->getQuery()->getResult();
}
<强>更新强>
symblog教程似乎已关闭,我暂时离开这里的链接,以防万一临时。相关代码在答案中。
答案 1 :(得分:1)
我也面临同样的问题。似乎从逆向学说查询时也会查询拥有方。请参阅this discussion。