我有一个与FooBar有OneToOne关系的实体Person,其中FooBar可以为空。
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来获取所有没有任何foobars的人。我试图这样做
$queryBuilder = $this->createQueryBuilder('p')
->innerJoin('p.foo_bar', 'fb', 'WITH', 'fb.id IS NULL');
但这并没有带来任何结果,我知道我有一些人没有foobars?
答案 0 :(得分:0)
你必须先离开加入,然后限制。你的内心刚刚不会那样工作。
类似的东西(我现在无法进行语法检查);
$qb = $this->createQueryBuilder('p');
$qb->leftJoin('p.foo_bar', 'fb')
->where($qb->expr()->isNull('fb'))
->getQuery()->getResult();
应该做的伎俩。你可能还需要一个addSelect用于fb别名。