2013-03-22 143 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