我在查询构建器上苦苦挣扎。我有实体类别和预算,它们具有多对多的关系。用户应该能够使用给定的类别创建新预算。在创建新预算时,我想检查是否还有现有预算,其中包含给定的类别
为了更好地解释一下,假设我有类别:食品,旅行,电子和已经创建的旅行和食品预算,然后用户想要为旅行和食品创建另一个预算,他当然不应该这样做。
我尝试使用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();
当然会引发异常。
答案 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'