首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >doctrine2使用过多的SQL查询加载带有fetch模式的一对多关联。

doctrine2使用过多的SQL查询加载带有fetch模式的一对多关联。
EN

Stack Overflow用户
提问于 2012-01-26 23:24:07
回答 2查看 26.6K关注 0票数 18

我正在加载一个包含许多实体的列表。

这些实体与其他实体具有一对多的关联。

我希望在一个单独的SQL查询中加载所有其他实体(而不是为第一个列表中的每个实体加载一个查询)。

正如doctrine2文档中所描述的:http://www.doctrine-project.org/docs/orm/2.1/en/reference/dql-doctrine-query-language.html#temporarily-change-fetch-mode-in-dql这应该可以通过“急切”加载来实现。

但它并不像所描述的那样工作。

我的代码:

代码语言:javascript
复制
class User{
    /**
     * @ORM\OneToMany(targetEntity="Address", mappedBy="user", indexBy="id", fetch="EAGER")
     */
    protected $addresses;
    public function __construct(){
        $this->addresses = new ArrayCollection();
    }
}

class Address{
    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="addresses")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="UserId", referencedColumnName="id")
     * })
     */
    private $user;
}

class UserRepository{
    public function findUsersWithAddresses(){
        return $this->getEntityManager()
            ->createQuery('SELECT u FROM MyBundle:User u ORDER BY u.name ASC')
            ->setFetchMode('MyBundle\Entity\User', 'addresses', \Doctrine\ORM\Mapping\ClassMetadata::FETCH_EAGER)
            ->setMaxResults(10)
            ->getResult();
    }
}

方法UserRepository::findUsersWithAddresses()执行11个SQL查询。

如何告诉Doctrine只使用一个SQL查询来加载address实体?

我正在使用:

  • symfony v2.0.9
  • doctrine-common 2.1.4
  • doctrine-dbal 2.1.5
  • doctrine 2.1.5
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-10 16:18:23

当前版本的规则不支持这一点。

在doctrine2问题跟踪器中有一个关于这一点的feature request

因此,我希望它能尽快实施。

票数 9
EN

Stack Overflow用户

发布于 2014-05-15 22:26:22

我遇到了完全相同的问题,并将Zend Framework2中的doctrine模块更新为2.5版,现在一切正常。你可以查看我的问题

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9020433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档