1

我在 symfony2 中有关系(ManyToMany):

项目 <-> 类别

数据库:

项目:ID NAME

类别 ID 名称 SLUG

项目类别:id item_id category_id

我正在尝试通过 x slugs 找到与类别相关的所有项目。

代码不起作用:

 $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')

任何想法如何做到这一点?

4

3 回答 3

0

你有一个双和,你的类别都没有两个 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
于 2013-03-21T20:02:38.817 回答
0
$qb = $this->createQueryBuilder('i');
$qb
    ->select('i')
    ->join('i.categories', 'c')
    ->where($qb->expr()->in('c.slug', ':slugs'))
    ->setParameter('slugs', ['first_slug', 'second_slug', 'third_slug'])
    ->distinct(i.id) // to prevent having same item more than once
;
于 2013-03-21T20:07:16.573 回答
0

根据评论,我认为您想使用连接条件:

$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 的项目。

于 2013-03-21T21:10:18.807 回答