gpt4 book ai didi

symfony - 如何防止 Doctrine 延迟加载一对一关系?

转载 作者:行者123 更新时间:2023-12-02 20:53:59 27 4
gpt4 key购买 nike

编辑:如果您遇到类似问题 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 中,我循环浏览帖子并显示帖子数据和关联的用户,但我从不请求任何 UserSettings 变量,我根本不访问它们。

最佳答案

我在一些地方看到过这个问题,我在这里添加我的答案:

我遇到了同样的问题,并记得 symblog 教程提供了一个示例,说明如何通过在不需要的表上显式添加左联接来减少延迟加载。当您根本不需要这些数据时,在联接中包含表似乎很奇怪,但这样您就可以将所有这些额外查询减少到 1 个,而且运行速度确实更快。

搜索延迟加载 - 大约向下的 1/5 http://tutorial.symblog.co.uk/docs/customising-the-view-more-with-twig.html

要修复此用户/用户数据问题,请尝试将其添加到用户存储库中,并在您需要获取所有用户时使用,即使您不需要用户数据。可以通过选择部分来进一步增强: ->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 教程似乎已关闭,我暂时将链接留在这里,以防它是临时的。相关代码在答案中。

关于symfony - 如何防止 Doctrine 延迟加载一对一关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9735930/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com