0

郡用と都市用の 2 つのエンティティ/テーブルがあります。特定の郡は都市と 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 に答える