我有两个表:分配和与分配相关的文件。我想获取与应用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()”时,说教在做一个额外的查询来获取所有文件。
答案 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