Doctrine 使用symfony中的querybuilder创建特定查询

Doctrine 使用symfony中的querybuilder创建特定查询,doctrine,repository,symfony,query-builder,dql,Doctrine,Repository,Symfony,Query Builder,Dql,我正在用symfony 3开发一个应用程序,我想用query builder创建一个自定义查询。 我有一个实体名为:边,有很多地址。地址是另一个实体。所以我想得到Bien实体中不存在的所有地址 我要生成的查询是:从地址a中选择a.id,其中a.id不在选择b.address\U id from bien b中 在我的AddressRepository中,我做到了: public function getAdressesByRueNotJoined($rue) { $qb2

我正在用symfony 3开发一个应用程序,我想用query builder创建一个自定义查询。 我有一个实体名为:边,有很多地址。地址是另一个实体。所以我想得到Bien实体中不存在的所有地址

我要生成的查询是:从地址a中选择a.id,其中a.id不在选择b.address\U id from bien b中

在我的AddressRepository中,我做到了:

public function getAdressesByRueNotJoined($rue)
    {
        $qb2 = $this->createQueryBuilder('ab')
            ->from('BienBundle:Bien', 'bi');
        $qb = $this->createQueryBuilder('a');

        return
            $qb->where('a.rue = :rue')
                ->setParameter('rue', $rue)
                ->andWhere(
                    $qb->expr()->notIn('a', $qb2->getDQL())
                )
                ->getQuery()
                ->getResult();
    }
返回的查询是:

从中选择a0_u.id作为id_0,a0_u.name作为name_1,a0_u.rue_id作为rue_id_2 地址a0,其中a0,rue,id=?和a0_u2;.id不在选择a1_2;.id中 地址:a1,B,b2_


我该如何解决这个问题呢?

看起来您的整个请求都是错误的,如果Bien与ADRESE有一对一的关系,您应该使用join按Rue查询您的Bien

$qb = $this
    ->createQueryBuilder('b')
    ->select('b.id')
    ->from('BienBundle:Bien b')
    ->leftJoin('b.addresses' 'a' )
    ->where('a.rue = :rue')
    ->setParameter('rue', $rue)
    ->getQuery()
    ->getResult()
;

在$qb2中,我添加了如下标识

$qb2 = $this->createQueryBuilder('ad')
            ->from('SBC\BienBundle\Entity\Bien', 'bi')
            ->select('IDENTITY(bi.address)');

但我不知道这是什么意思

我建议您查看Mawcel答案,以了解您必须如何构造查询。尝试将他的查询与条令文档中的notIn条件混合使用:。