如何使用 Symfony 和 Doctrine 查询生成器执行联接查询

2022-08-31 00:17:38

我有两个实体通过1:1关系连接,例如:我想创建一个 Doctrine 查询,我可以在其中根据 中某个列的值检索数据。像这样的东西(当然它不起作用):MyEntity.idRelatedEntityMyEntityRelatedEntity

$entity = $em
    ->getRepository('MyBundle:RelatedEntity')
    ->createQueryBuilder('e')
    ->leftJoin('MyBundle:RelatedEntity', 'r')
    ->where('r.foo = 1')
    ->getQuery()
    ->getResult();

任何帮助将不胜感激:)


答案 1
$entity = $em
    ->getRepository('MyBundle:MyEntity')
    ->createQueryBuilder('e')
    ->join('e.idRelatedEntity', 'r')
    ->where('r.foo = 1')
    ->getQuery()
    ->getResult();

此外,左连接在这里也没有意义(因为 where 子句会使它像内部连接一样工作)


答案 2

请注意,您应该将此查询写在MyEntityRepository

public function getMyEntityWithRelatedEntity($parameter) 
{
    $query = $this->createQueryBuilder('e')
        ->addSelect('r') // to make Doctrine actually use the join
        ->leftJoin('e.relatedEntity', 'r')
        ->where('r.foo = :parameter')
        ->setParameter('parameter', $parameter)
        ->getQuery();

    return $query->getResult();
}

然后在您的控制器/服务中使用它:

$manager = $this->getDoctrine()->getManager();
$results = $manager->getRepository(MyEntity::class)->getMyEntityWithRelatedEntity(1);

推荐