Symfony2& Doctrine2:自定义实体存储库查询,如果连接表没有关联行,则检索单个结果

时间:2013-01-28 01:00:57

标签: symfony doctrine-orm repository entity

我有两个实体/表,一个用于县,一个用于城市。一个特定的县与城市之间有一个OneToMany关系,我试图在实体存储库中创建一个自定义查询,根据它的ID查询一个县,并返回该县和与之对应的城市。

如果县指定了城市,我的查询目前看起来效果很好,但如果它还没有任何城市,则Doctrine会给我一个“无法找到县实体。”例外情况。

我相信我的查询中存在逻辑错误,但如果没有城市与之关联,我很难重新编写它以仅按ID返回县。

我的查询:

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;
    }
  }
}

如果没有分配城市,我怎么能改变上面的代码仍然给出一个县的结果呢?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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

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