Doctrine2如何比较两个结果集

时间:2013-07-19 20:33:37

标签: doctrine-orm

我有两个实体: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]的类型,它们是一个主义持久性集合

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

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

1 个答案:

答案 0 :(得分:1)

我最终使用了doctrine查询构建器。这令人痛苦,但我终于明白了。结果如下:

$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)));
相关问题