Symfony2&;Doctrine2:自定义实体存储库查询,用于在联接表没有关联行时检索单个结果

Symfony2&;Doctrine2:自定义实体存储库查询,用于在联接表没有关联行时检索单个结果,symfony,doctrine-orm,repository,entity,Symfony,Doctrine Orm,Repository,Entity,我有两个实体/表格,一个用于县,一个用于市。一个特定的县与城市有一个OneToMany关系,我正在尝试在实体存储库中进行一个自定义查询,以根据县的ID查询县,并返回该县及其对应的城市 如果县里有城市分配,我的查询目前似乎很有效,但如果县里还没有任何城市,条令会给我一个“找不到县城实体”的例外 我相信我的查询中有一个逻辑错误,但是我很难重新编写它,如果没有城市与之关联,那么只能通过ID返回County 我的问题是: class CountyRepository extends EntityRepo

我有两个实体/表格,一个用于县,一个用于市。一个特定的县与城市有一个OneToMany关系,我正在尝试在实体存储库中进行一个自定义查询,以根据县的ID查询县,并返回该县及其对应的城市

如果县里有城市分配,我的查询目前似乎很有效,但如果县里还没有任何城市,条令会给我一个“找不到县城实体”的例外

我相信我的查询中有一个逻辑错误,但是我很难重新编写它,如果没有城市与之关联,那么只能通过ID返回County

我的问题是:

class CountyRepository extends EntityRepository
{
  public function findOneByIdJoinedToCities($id)
  {
    $qb = $this->createQueryBuilder('c')
               ->addSelect('p')
               ->join('c.cities', 'p')
               ->where('p.county = :id')
               ->setParameter('id', $id)
               ;

    $query = $qb->getQuery();

    try {
        return $query->getSingleResult();
    } catch (\Doctrine\ORM\NoResultException $e){
        return null;
    }
  }
}
如果还没有为县分配任何城市,我如何更改上述代码以仍然返回县的单个结果


谢谢你的帮助

基本SQL问题:使用左连接。例如:

    $qb = $this->createQueryBuilder('c')
               ->addSelect('p')
               ->leftJoin('c.cities', 'p')
//               ^^^^^^^^
               ->where('p.county = :id')
               ->setParameter('id', $id)
               ;