gpt4 book ai didi

php - doctrine2 使用过多的 SQL 查询加载一对多关联

转载 作者:IT王子 更新时间:2023-10-29 00:08:17 26 4
gpt4 key购买 nike

我正在加载一个包含许多实体的列表。
这些实体与其他实体具有一对多关联。
我想在一个 SQL 查询中加载所有这些其他实体(而不是对第一个列表中的每个实体进行一个查询)。

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

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

我的代码:

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 查询来加载地址实体?

我正在使用:

  • symfony v2.0.9
  • 共同 Doctrine 2.1.4
  • Doctrine -dbal 2.1.5
  • Doctrine 2.1.5

最佳答案

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

有一个feature request在 Doctrine 2问题跟踪器中对此进行了讨论。

所以我希望它会尽快实现。

关于php - doctrine2 使用过多的 SQL 查询加载一对多关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9020433/

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