原则:选择与另一个表相关的行

时间:2018-11-16 09:03:00

标签: doctrine

我有两个表:分配和与分配相关的文件。我想获取与应用where句子的文件的任何行相关的赋值行。

$querybuilder = $this->createQueryBuilder('query');
$querybuilder
    ->select('assignment')
    ->from(AssignmentReadModel::class, 'assignment')
    ->innerJoin('assignment.files', 'files')
    ->where('files.name=:archivo')
    ->setParameter('archivo', 'practica');

$data = $querybuilder->getQuery()->getResult();
$files = $data[0]->files();
var_export($files->count());

通过此查询,当只应获取一个文件“ practica”时,我将获取所有文件。当我执行“ $ files-> count()”时,说教在做一个额外的查询来获取所有文件。

1 个答案:

答案 0 :(得分:1)

在查询中,没有选择 files 实体的列,因此这不是结果行的一部分,因此该关系未水化

要获取过滤文件,请同时选择文件关系:

$querybuilder
->select('assignment')
->addSelect('files')

注意

一旦关系被水合,该水合的集合将用于该实体进行其他查询(引用all result row doesn't fetch in object,除非您选择

1)刷新集合:

$em->refresh($assignment);

,并且在关系定义的级联操作中还包括refrech选项:

@OneToMany(targetEntity="File", mappedBy="assignment", cascade={"refresh"})

2)使用查询生成器进行设置时:

use Doctrine\ORM\Query;

$querybuilder->setHint(Query::HINT_REFRESH, true);    // <-- Tell the hydrator to refresh