小编aba*_*cco的帖子

Doctrine2 One-To-Many fetch = EAGER是如何工作的?

我正在使用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 = …

symfony doctrine-orm

6
推荐指数
1
解决办法
3560
查看次数

标签 统计

doctrine-orm ×1

symfony ×1