我有两个实体:Category
和Icon
他们有一个多对多的关系,所以我最终有三个表:category
icon
和icon_category
Doctrine2如何比较两个结果集
我的目标是要找到在图标多个类别。
例如我有以下
类别: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]
的类型和他们是一个原则持久性集合
我也打过电话$res = $res->toArray()
和$cat = $cat->toArray()
调用array_intersect
之前,这解决了错误,但没有返回预期的结果:Icon(1)
有没有人有任何想法或甚至更好的方法来解决这一切?
为什么你不想使用DQL:'... WHERE icon.category(a,b)'? – meze
我试过这个为我的查询:'选择我从SixStringPearBundle:图标我在哪里i.categories IN(1,2)'和我得到以下错误:类别IN:错误:无效PathExpression。 StateFieldPathExpression或SingleValuedAssociationField expected.''(1,2)'指的是类别标识 –
' WHERE IDENTITY(i.categories)IN'。 – meze