1

私はsymfony2に関係(ManyToMany)を持っています:

アイテム <-> カテゴリ

データベース:

アイテム: ID NAME

カテゴリー ID NAME SLUG

商品カテゴリ: id item_id category_id

x スラッグでカテゴリに関連付けられているすべてのアイテムを見つけようとしています。

コードが機能しません:

 $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

二重の and があり、どのカテゴリにも 2 つのスラッグがないため、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 に答える