在带有Doctrine的Symfony2中,我想只获取没有相关记录的记录

时间:2016-03-21 22:17:50

标签: symfony doctrine

我有一个与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?

1 个答案:

答案 0 :(得分:0)

你必须先离开加入,然后限制。你的内心刚刚不会那样工作。

类似的东西(我现在无法进行语法检查);

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

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

应该做的伎俩。你可能还需要一个addSelect用于fb别名。