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?

25
demandé sur Wilt 2012-07-29 00:34:29

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);
54
répondu DEY 2016-07-06 12:05:15

@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);
7
répondu Wilt 2015-10-20 17:16:53

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));
6
répondu Bartosz Rychlicki 2012-07-29 11:36:18

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.

1
répondu Jens 2017-05-23 12:02:46

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));
1
répondu Karol Gasienica 2018-01-26 08:55:36