Übergeben Sie ein Array von Bedingungen an die Doktrin expr()->orx() Methode

Lesezeit: 2 Minuten

Benutzer-Avatar
Bartosz Rychlicki

Ich muss DQL mit a konstruieren QueryBuilder so was

[QUERY]... AND WHERE e.type = x OR e.type = Y OR e.type = N [...]

Ich habe Typen im Array. Wie kann ich dieses Array an meinen Abfragegenerator übergeben?

$qb->andWhere($qb->expr()->orx(CONDITIONS));

Die Liste der Typen wird dynamisch sein und aufrufen $qb->andWhere Bei jeder foreach-Typenschleife werden nur mehr AND WHEREs keine ORs mehr gemacht.
Kann ich mehrfach speichern orx Ausdrücke und fügen Sie es dann hinzu andWhere? Irgendeine Idee, wie man dieses wahrscheinlich häufige Problem lösen kann?

Ich hoffe es, dann habe ich das hier gefunden:

$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);

Mit dem @meze-Vorschlag können Sie den Code vereinfachen und die ersetzen für jeden Aussage mit:

$orX->addMultiple($conditions);

  • Jeder Tag ist besser als zuvor, jeder kann durch ersetzt werden $orX->addMultiple($conditions);

    – Mezze

    2. August 2013 um 7:51 Uhr


  • Ich habe die Antwort auf Community-Wiki geändert. @meze, du kannst es gerne mit deinen Änderungen bearbeiten.

    – DEY

    20. Februar 2015 um 11:16 Uhr

Benutzer-Avatar
Verwelken

@DEY seine Antwort kann vereinfacht werden. Keine Notwendigkeit für das foreach, das funktioniert auch:

$conditions = array('e.type = x', 'e.type = Y', 'e.type = N');

$orX = $qb->expr()->orX();
$orX->addMultiple($conditions);

$qb->where($orX);

Ich wusste, dass morgen ein besserer Tag wird. Die Lösung ist einfach. Sie können ein Array von ODER-Ausdrücken wie folgt erstellen

$ors[] = $qb->expr()->orx('e.type=".$qb->expr()->literal($value));

Und dann fügen Sie es einfach über die Join-Methode zur andWhere()/Where()-Methode des Query Builders hinzu:

$qb->andWhere(join(" OR ', $ors));

Sie können auch verwenden ... in php wie:

$conditions = array('e.type = x', 'e.type = Y', 'e.type = N');
$criteria = Criteria::create();
$criteria->andWhere(Criteria::expr()->orX(...$conditions));

Benutzer-Avatar
Jens

Sie können auch die verwenden call_user_func_array funktionieren so.

Damit können Sie eine Methode aufrufen, die die Elemente eines Arrays als Parameter übergibt.

Zum Beispiel:

$conditions = array('e.type = x', 'e.type = Y', 'e.type = N');
$expr = $qb->expr();
call_user_func_array(array($expr, 'orX'), $conditions);

1283340cookie-checkÜbergeben Sie ein Array von Bedingungen an die Doktrin expr()->orx() Methode

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy