2016-03-21 3 views
0

私はFooBarとのOneToOne関係を持つエンティティPersonを持っています。ここでFooBarはnullableです。Symfony2とDoctrineでは、関連レコードを持たないレコードのみを取得したい

class Person 
{ 
    /** 
    * @ORM\OneToOne(targetEntity="Acme\MyBundle\Entity\FooBar", inversedBy="person") 
    * @ORM\JoinColumn(name="foo_bar_id", referencedColumnName="id") 
    */ 
    protected $foo_bar; 
} 

class FooBar 
{ 
    /** 
    * @ORM\OneToOne(targetEntity="Acme\MyBundle\Entity\Person", mappedBy="foo_bar") 
    */ 
    protected $person; 
} 

私はquerybuilderを使用して、詐欺師を持たないすべての人物を取得したいと考えています。私はこの

$queryBuilder = $this->createQueryBuilder('p') 
    ->innerJoin('p.foo_bar', 'fb', 'WITH', 'fb.id IS NULL'); 

をやろうとしたしかし、それは結果を返しません、と私はfoobarsせずに何人かの人々を持って知っていますか?

答えて

0

最初に参加を残してから制限しなければなりません。あなたのinnerJoinはちょうどそのように動作しません。

何かのようなものです(今は構文チェックできません)。

$qb = $this->createQueryBuilder('p'); 

$qb->leftJoin('p.foo_bar', 'fb') 
     ->where($qb->expr()->isNull('fb')) 
     ->getQuery()->getResult(); 

このトリックを行う必要があります。そこにfbエイリアス用のaddSelectが必要な場合もあります。

関連する問題