我有兩個實體: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