我有两个实体/表,一个用于县,一个用于城市。一个特定的县与城市之间有一个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;
}
}
}
如果没有分配城市,我怎么能改变上面的代码仍然给出一个县的结果呢?
感谢您的帮助!
答案 0 :(得分:1)
基本SQL问题:使用左连接。例如:
$qb = $this->createQueryBuilder('c')
->addSelect('p')
->leftJoin('c.cities', 'p')
// ^^^^^^^^
->where('p.county = :id')
->setParameter('id', $id)
;