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

ここに見えます

EDIT
指定されたすべての値のみをチェックする行をフィルタリングできる SQL ステートメントがあります。ALL声明です。

MySQL
の場合SQL Server
の場合ORACLEの場合

Doctrine の使用 (ここから)

// 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 に答える