passer tableau des conditions à la méthode de la doctrine expr () - > orx ()
j'ai besoin de construire DQL avec un QueryBuilder
comme ceci
[QUERY]... AND WHERE e.type = x OR e.type = Y OR e.type = N [...]
j'ai des types dans array Comment puis-je passer ce tableau à mon constructeur de requêtes?
$qb->andWhere($qb->expr()->orx(CONDITIONS));
la liste des types sera dynamique, appeler $qb->andWhere
sur chaque boucle de type foreach ne fera que plus et où n'est plus ORs.
puis-je stocker des expressions multiples orx
puis les ajouter à andWhere
? Une idée de comment résoudre ce problème, probablement, problème commun?
5 réponses
Je l'espère, puis j'ai trouvé ceci:
$conditions = array('e.type = x', 'e.type = Y', 'e.type = N');
$orX = $qb->expr()->orX();
foreach ($conditions as $condition) {
$orX->add($condition);
}
$qb->add('where', $orX);
en utilisant la suggestion de @meze, vous pouvez simplifier le code et remplacer le foreach par:
$orX->addMultiple($conditions);
@dey sa réponse peut être simplifiée. Pas besoin du foreach, cela fonctionne aussi:
$conditions = array('e.type = x', 'e.type = Y', 'e.type = N');
$orX = $qb->expr()->orX();
$orX->addMultiple($conditions);
$qb->where($orX);
je savais que tommarow serait une meilleure journée. La solution est simple. Vous pouvez faire des tableau de la OU des expressions comme
$ors[] = $qb->expr()->orx('e.type = '.$qb->expr()->literal($value));
et puis il suffit de l'ajouter à la méthode andWhere()/Where() du constructeur de requête via join method like so:
$qb->andWhere(join(' OR ', $ors));
vous pouvez également utiliser la call_user_func_array fonction comme ceci .
il vous permet d'appeler une méthode passant les éléments d'un tableau comme paramètres.
vous pouvez également utiliser ...
en php comme:
$conditions = array('e.type = x', 'e.type = Y', 'e.type = N');
$criteria = Criteria::create();
$criteria->andWhere(Criteria::expr()->orX(...$conditions));