Symfony2 Querybuilder - 多对多的关系

时间:2013-03-22 08:40:19

标签: symfony doctrine many-to-many query-builder

我在查询构建器上苦苦挣扎。我有实体类别和预算,它们具有多对多的关系。用户应该能够使用给定的类别创建新预算。在创建新预算时,我想检查是否还有现有预算,其中包含给定的类别 为了更好地解释一下,假设我有类别:食品,旅行,电子和已经创建的旅行和食品预算,然后用户想要为旅行和食品创建另一个预算,他当然不应该这样做。
我尝试使用IN但它只需要单个值而不是数组:

$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();

当然会引发异常。

1 个答案:

答案 0 :(得分: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

使用Doctrine(来自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'