Doctrine Abfrage mittels andWhere und orX in einer Schleife

Doctrine

Nachdem mich die Recherche zu diesem Doctrine Query ein wenig Zeit gekostet hat, möchte ich die Lösung für dieses Problem gerne mit Euch teilen.

Ziel soll folgender SQL Query sein:

SELECT * FROM table WHERE table.a=1 AND (table.b=2 OR table.b=3);

Das Ganze ist mit der Doctrine Expression Klasse Orx an sich sehr schön und einfach zu lösen. Etwas komplizierter wird das Ganze, wenn die Elemente im OR Teil dynamisch generiert und mit Parametern versehen werden sollen.

Ich habe mich nun für folgenden Lösungsweg entschieden – andere Vorschläge sind herzlich willkommen:

// Set some kind of OR params for this example
$orParams = [2,3];

// Build query
$qb = Shopware()->Models()->createQueryBuilder()
    ->select('table')
    ->from('Table', 'table')
    ->where('table.a=1');

// Limit articles to pzn options
if (!empty($orParams)):
    $arr=[];
    $i=0;
    foreach($orParams as $param):
        $orArr[] = $qb->expr()->orX('table.b = :param'.$i);
        $qb->setParameter('param'.$i,$param);
        $i++;
    endforeach;
    $qb->andWhere(join(' OR ', $orArr));
endif;

// Build the query
$query = $qb->getQuery();
Zusammenfassung
Doctrine Abfrage mittels andWhere und orX in einer Schleife
Titel
Doctrine Abfrage mittels andWhere und orX in einer Schleife
Beschreibung
Nachdem mich die Recherche zu diesem Doctrine Query ein wenig Zeit gekostet hat, möchte ich die Lösung für dieses Problem gerne mit Euch teilen.
Autor
Publisher
synonymous.rocks
Logo

Kommentar verfassen

Folge mir auf Twitter

Hol Dir kostenlos Tipps und Tricks zu Shopware, E-Commerce und andere Open-Source Produkte.

Folge @synonymousrocks