1

我有两个实体:它们CategoryIcon一个多对多的关系,所以我最终得到了三个表:category iconicon_category

我的目标是找到属于多个类别的图标。

例如我有以下

类别:a b c和图标1 2 3

以下是图标的类别:

1-a b

2-a

3-c

我想搜索类别中的图标ab获得1结果。

我的第一种方法是将每个类别(ab)加载到单独的结果中,然后使用以下方法进行比较array_intersect()

  $cats = array();

  foreach($terms as $term){
      $cat = $em->getRepository('SixStringPearBundle:Category')->findOneBy(array("name" => $term));
      if($cat){
         $cats[$term] = $cat->getIcons();
      }
  }

这返回$cats[a] = array(icon(1), icon(2)$cats[b] = array(icon(1))

然后我尝试了以下方法:

    $res = array_shift($cats);
    foreach($cats as $cat){
        $res = array_intersect($res, $cat);
    }

但出现以下错误:Argument #1 is not an array

我检查了和它们的类型,$cat[a]它们$cat[b]是 Doctrine Persistence Collection

我也尝试调用$res = $res->toArray()$cat = $cat->toArray()调用之前array_intersect这解决了错误但没有返回预期的结果:Icon(1)

有没有人对这一切有任何想法甚至更好的方法?

4

1 回答 1

1

我最终使用了学说查询生成器。这很痛苦,但我终于弄明白了。这是最终结果:

$qb->select('i')
   ->from('SixStringPearBundle:Icon', 'i')
   ->leftJoin('i.categories', 'c')
   ->where('c.name IN (?1)')
   ->groupBy('i.id')
   ->having('count(i.id) = ?2')
   ->setParameters(array(1 => $terms, 2 => count($terms)));
于 2013-07-19T22:58:24.523 回答