我正在加载一个包含许多实体的列表。
这些实体与其他实体具有一对多的关联。
我希望在一个单独的SQL查询中加载所有其他实体(而不是为第一个列表中的每个实体加载一个查询)。
正如doctrine2文档中所描述的:http://www.doctrine-project.org/docs/orm/2.1/en/reference/dql-doctrine-query-language.html#temporarily-change-fetch-mode-in-dql这应该可以通过“急切”加载来实现。
但它并不像所描述的那样工作。
我的代码:
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实体?
我正在使用:
发布于 2012-02-10 16:18:23
发布于 2014-05-15 22:26:22
我遇到了完全相同的问题,并将Zend Framework2中的doctrine模块更新为2.5版,现在一切正常。你可以查看我的问题
https://stackoverflow.com/questions/9020433
复制相似问题