2013-03-22 73 views
0

我在查詢生成器中苦苦掙扎了一下。我有具有多對多關係的實體類別和預算。用戶應該能夠使用給定的類別創建新的預算。在創建新的預算時,我想檢查是否已經存在預算,其中包含給定的類別。
爲了更好地解釋,假設我有類別:食物,旅遊,電子和已經爲旅行和食物創建了預算,然後用戶想要爲旅行和食物創建另一個預算,他當然不應該這樣做。
我嘗試使用IN但是隻需要單個值不是一個數組:
Symfony2 Querybuilder - 多對多的關係

$budgets = $this->createQueryBuilder('bud'); 
$budgets->where('bud.user = :user') 
->andWhere($budgets->expr()->in('bud.tags', array(10, 11, 12))) 
->setParameter('user', $budget->getUser()) 
->getQuery()->getResult(); 

這當然會引發異常。

回答

0

答案的一部分將是:

// Example - $qb->expr()->in('u.id', array(1, 2, 3)) 
// Make sure that you do NOT use something similar to $qb->expr()->in('value', array('stringvalue')) as this will cause Doctrine to throw an Exception. 
// Instead, use $qb->expr()->in('value', array('?1')) and bind your parameter to ?1 (see section above) 
public function in($x, $y); // Returns Expr\Func instance 

我看到它here

編輯
有一個SQL語句,讓你可以過濾行,只有檢查所有給定值的。 這是ALL聲明。

對於MySQL
對於SQL Server
對於ORACLE

教義使用(從here

// Example - $qb->expr()->all($qb2->getDql()) 
public function all($subquery); // Returns Expr\Func instance 

$subquery應該是這樣的:

SELECT id_categorie FROM budget_categorie WHERE id_budget = '$idBudget' 
+0

沒錯,但問題在函數中,$ x參數可以只是一個單一的值(這意味着將返回所有與$ y參數中的數組具有相同id的結果),我不能在('bud.tags ',array(1,2,3)) – haluzak 2013-03-22 09:10:39

+0

問題在'bud.tags'不在數組中,bud.tags是一個數組,它必須是單值 – haluzak 2013-03-22 09:17:41

+0

對不起,我的困惑。我正在尋找好的問題...;)你能顯示數據庫的哪部分存儲預算和budget_categories? – JoDev 2013-03-22 09:50:30