我有两个实体:它们Category
有Icon
一个多对多的关系,所以我最终得到了三个表:category
icon
和icon_category
我的目标是找到属于多个类别的图标。
例如我有以下
类别:a
b
c
和图标1
2
3
以下是图标的类别:
1
-a
b
2
-a
3
-c
我想搜索类别中的图标a
并b
获得1
结果。
我的第一种方法是将每个类别(a
和b
)加载到单独的结果中,然后使用以下方法进行比较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)
有没有人对这一切有任何想法甚至更好的方法?