0

我在查询生成器上有点挣扎。我有具有多对多关系的实体类别和预算。用户应该能够创建具有给定类别的新预算。创建新预算时,我想检查是否存在包含给定类别的预算。
为了更好地解释,假设我有类别:食品、旅行、电子产品,并且已经为旅行和食品创建了预算,然后用户想要为旅行和食品创建另一个预算,他当然不应该这样做。
我尝试使用 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();

这当然会引发异常。

4

1 回答 1

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

在这里看到了。

编辑
有一个 SQL 语句允许您过滤只检查所有给定值的行。是ALL声明。

对于MySQL
对于SQL Server
对于ORACLE

使用教义(从这里

// 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'
于 2013-03-22T08:44:43.747 回答