Symfony 在ManyToMany中为查询生成器添加更多条件

Symfony 在ManyToMany中为查询生成器添加更多条件,symfony,doctrine-orm,symfony-2.1,Symfony,Doctrine Orm,Symfony 2.1,我在symfony2有很多关系: 项目类别 数据库: 项目: 身份证名称 类别 ID名称SLUG 项目类别: id项目\u id类别\u id 我正试图找到所有与x Slug类别相关的项目 代码不起作用: $qb = $this->createQueryBuilder('i') ->select('i, c ') ->leftJoin('i.categories', 'c') ->setParameter('firstS

我在symfony2有很多关系:

项目类别

数据库:

项目: 身份证名称

类别 ID名称SLUG

项目类别: id项目\u id类别\u id

我正试图找到所有与x Slug类别相关的项目

代码不起作用:

 $qb = $this->createQueryBuilder('i')
        ->select('i, c ')
        ->leftJoin('i.categories', 'c')

        ->setParameter('firstSlug', 'first')
        ->andWhere('c.slug = :firstSlug')

        ->setParameter('secondSlug', 'second')
        ->andWhere('c.slug = :secondSlug')

你知道怎么做吗?

你有一个double and,而且没有一个类别有两个slug,所以没有一个类别同时匹配c.slug=first和c.slug=second。尝试:

$qb = $this->createQueryBuilder('i')
    ->select('i, c ')
    ->leftJoin('i.categories', 'c')

    ->setParameter('firstSlug', 'first')
    ->andWhere('c.slug = :firstSlug')

    ->setParameter('secondSlug', 'second')
    ->orWhere('c.slug = :secondSlug')                <<< change in this line
$qb=$this->createQueryBuilder('i'))
->选择('i,c')
->leftJoin('i.categories','c')
->setParameter('firstSlug','first')
->andWhere('c.slug=:firstSlug')
->setParameter('secondSlug','second')

->或者where('c.slug=:secondSlug')根据注释,我认为您需要使用连接条件:

$qb = $this->createQueryBuilder('i');
$qb->select('i, c ')
   ->join('i.categories', 'c', 'ON', 'c.slug = :firstSlug')
   ->join('i.categories', 'c', 'ON', 'c.slug = :secondSlug')
   ->setParameter('firstSlug', 'first')
   ->andWhere('c.slug = :secondSlug')
;

您不能使用左连接,您将匹配没有slug的项。

我认为
setParameter
需要在
和where
子句之后。此代码:$qb=$this->createQueryBuilder('I')->select('I,c')->leftJoin('I.categories','c')->setParameter('firstSlug','first'))->andWhere('c.slug=:firstSlug')检索项目id:1此代码:->setParameter('secondSlug','second')->andWhere('c.slug=:secondSlug')检索项目id:1,但如果我使用:$qb=$this->createQueryBuilder('I')->选择('I,c'),我需要提取此处和此处的项目(按类别slug))->leftJoin('i.categories','c')->setParameter('firstSlug','first')->andWhere('c.slug=:firstSlug')->setParameter('secondSlug','secondSlug')->andWhere('c.slug=:secondSlug')查询不返回任何内容……这与->setParameter('firstSlug','first')->andWhere('c.slug=:firstSlug')相同)->setParameter('secondSlug','second')->or where('c.slug=:secondSlug')我需要返回包含给定slug列表的两个类别中的项目。请取消选中答案,否则其他人可能不会响应。我需要返回包含给定slug列表的两个类别中的项目,而不是或。
$qb = $this->createQueryBuilder('i');
$qb->select('i, c ')
   ->join('i.categories', 'c', 'ON', 'c.slug = :firstSlug')
   ->join('i.categories', 'c', 'ON', 'c.slug = :secondSlug')
   ->setParameter('firstSlug', 'first')
   ->andWhere('c.slug = :secondSlug')
;