16
這可能看起來像一個基本的要求,但我似乎無法得到它的工作,所以我要麼失去了一些愚蠢的東西,要麼不瞭解應該如何去做。提前致謝。Doctrine 2.1 DQL - 多對多查詢多個值 - 多個類別中的項目?
我有兩個多對多關係的學說實體:項目和類別。由items_has_categories連接。
/**
* Item
*
* @Table(name="items")
* @Entity(repositoryClass="Entity\Repository\Item")
*/
class Item
{
....
/**
* @var Categories
*
* @ManyToMany(targetEntity="Categorie", inversedBy="items", cascade={"persist"})
* @JoinTable(name="items_has_categories",
* joinColumns={
* @JoinColumn(name="items_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @JoinColumn(name="categories_id", referencedColumnName="id")
* }
*)
*/
private $categories;
....
}
/**
* Categorie
*
* @Table(name="categories")
* @Entity(repositoryClass="Entity\Repository\Categorie")
*/
class Categorie
{
.....
/**
* @var Items
*
* @ManyToMany(targetEntity="Item", mappedBy="categories")
*/
private $items;
....
}
什麼,我試圖做的是運行一個查詢返回是在所有類別的「X」號的所有項目 - 我認爲/以爲應該是選擇具有與AND子句:
class Item extends EntityRepository
{
public function findItemsByCategories($categories)
{
$qString = 'SELECT j, t, c FROM Technique\Entity\Item j LEFT JOIN j.itemImages t JOIN j.categories c WHERE';
$i = 0;
foreach ($categories as $c)
{
$qString .= ' c.name = ?' . $i;
if ($i < (count($categories)-1))
{
$qString .= ' AND';
}
$i++;
}
$query = $this->_em->createQuery($qString);
$query->setParameters($categories);
return $query->getResult();
}
這代碼一點沒有錯誤,並吐出了以下DQL SELECT查詢時(2類數組中發送:$類):
SELECT j, t, c FROM Technique\Entity\Item j LEFT JOIN j.itemImages t JOIN j.categories c WHERE c.name = ?0 AND c.name = ?1
這總是返回一個空數組,即沒有結果秒。即使在我的數據庫中,有超過20個符合條件的項目:都屬於這兩個類別。
有人看到我在這裏做錯了嗎?這應該是一個AND選擇...?基本上我只是想知道如何查詢2++原則中的多對多關係,其中有多個必須滿足的值...
謝謝你分享你的發現。我即將放棄一個非常類似的問題,但MEMBER OF做了詭計。最適合你。 –
最後一個很好的方法來做到這一點。成員真的應該更多地記錄。甚至不知道它存在。非常感謝。 – ZolaKt
從我的實驗中,這種方法會導致運行多個子查詢。如果DQL接受它,用子查詢和使用IN()的WHERE子句會更好。如果這仍然適用於DQL,我會試驗併發布答案。 – Lewis