0

我有两个实体/表,一个用于县,一个用于城市。一个特定的县与城市具有 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;
    }
  }
}

如果尚未分配城市,我如何更改上面的代码以仍然返回一个单一的县结果?

谢谢您的帮助!

4

1 回答 1

1

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

    $qb = $this->createQueryBuilder('c')
               ->addSelect('p')
               ->leftJoin('c.cities', 'p')
//               ^^^^^^^^
               ->where('p.county = :id')
               ->setParameter('id', $id)
               ;
于 2013-01-28T01:23:00.113 回答