在使用左连接时检索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关系。
答案 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();