代码之家  ›  专栏  ›  技术社区  ›  Agustin Castro

条令:选择与另一个表相关的行

  •  0
  • Agustin Castro  · 技术社区  · 7 年前

    我有两个表:赋值表和与赋值相关的文件表。我想得到与应用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 回复  |  直到 7 年前
        1
  •  1
  •   Jannes Botis    7 年前

    在查询中,没有 文件夹 实体被选中,因此这不是结果行的一部分,因此关系是 不含水的 .

    得到 筛选的文件 ,同时选择 文件夹 关系:

    $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
    
    推荐文章