我正在使用Symfony 2.8/Doctrine ORM 2.5.2.
我有2个实体,GalleryOneToManyFile
class Gallery
{
/**
* @var File[]
*
* @ORM\OneToMany(targetEntity="File", mappedBy="gallery", fetch="EAGER")
*/
private $files;
}
Run Code Online (Sandbox Code Playgroud)
我在文档中看到了两件事.
首先,现在OneToMany关系确实有fetch=EAGER选项(在此处指定).它在以前的版本中不存在.
其次,对于OneToMany,每个查询的此获取方法的手动设置似乎不可用,但我不知道文档是否是最新的,因为它指出:
在查询期间更改提取模式只能用于一对一和多对一关系.
无论如何我都试过了,这是我的查询:
public function findWithEager()
{
$qb = $this->createQueryBuilder('g');
$query = $qb->getQuery();
$query->setFetchMode("CommonBundle\\Entity\\Gallery", "files", ClassMetadata::FETCH_EAGER);
return $query->getResult();
}
Run Code Online (Sandbox Code Playgroud)
但当我这样做时:
foreach ($galleryRepository->findWithEager() as $gallery) {
foreach ($gallery->getFiles() as $file) {
$file->getId();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我得到1 + n个查询.第一个是SELECT * FROM Gallery以下n个SELECT * FROM File WHERE id = …