使用symfony

时间:2017-02-13 08:12:54

标签: doctrine repository symfony query-builder dql

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

我想要生成的查询是:
select a.id from address a where a.id not in ( select b.address_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();
    }

返回的查询是:

  

SELECT a0_.id AS id_0,a0_.name AS name_1,a0_.rue_id AS rue_id_2 FROM   adresse a0_ WHERE a0_.rue_id =? AND a0_.id NOT IN(选择a1_.id FROM   adresse a1_,bien b2 _)

我该如何解决?

2 个答案:

答案 0 :(得分:1)

看起来你的整个请求都是错的,如果Bien与Adresse有一个关系,你应该使用一个联接来查询你的Biens

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

答案 1 :(得分:-1)

在$ qb2中我添加了像这样的识别

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

但我不是什么意思