使用左连接和查询构建器原则

时间:2016-07-19 16:12:13

标签: symfony doctrine-orm

在使用左连接时检索ManytoOne关系时遇到一些问题。

之前使用此查询查询会议

$qb = $this->createQueryBuilder('u')
->select('u.id,u.comment,
IDENTITY(u.place) AS place_id,
IDENTITY(u.sponsor) AS sponsor_id,
IDENTITY(u.tour) AS tour_id,
u.startat
');

现在,我正试图与扩散联系起来,扩散与多种关系中的扩散联系在一起。

  $qbt = $this->createQueryBuilder('u')
        ->select('u','c')
        ->from('AppBundle:Conference', 'p')
        ->leftJoin('p.diffusion', 'c');

但是,此查询不会返回u.place,u.sponsor和u.tour,它们是ManyToOne关系。

2 个答案:

答案 0 :(得分:1)

leftJoin必须跟随' WITH'。例如:

->leftJoin('p.diffusion', 'p', 'WITH', 'p.user=u.id', 'u.id');

但我觉得发布你的实体会更好,所以我可以给你准确的答案。

答案 1 :(得分:0)

发现问题,我不得不补充一下 - > setHint(\ Doctrine \ ORM \ Query :: HINT_INCLUDE_META_COLUMNS,true) 到getQuery,因为默认情况下getArrayResults不会返回外键(分别是地点,赞助商和巡演)。

这是我在会议资​​料库中的最终查询

        $qbt = $this->_em->createQueryBuilder();
        $qbt->select('conference','diffusion')
        ->from('AppBundle:Conference', 'conference')
        ->leftJoin('conference.diffusion', 'diffusion');

    return $qbt
        ->getQuery()
        ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true)
        ->useQueryCache(true)
        ->useResultCache(true,3600)
        ->getArrayResult();