Heim > Datenbank > MySQL-Tutorial > Wie verwende ich eine WHERE...IN-Unterabfrage mit dem Query Builder von Doctrine 2?

Wie verwende ich eine WHERE...IN-Unterabfrage mit dem Query Builder von Doctrine 2?

Barbara Streisand
Freigeben: 2025-01-13 21:54:47
Original
358 Leute haben es durchsucht

How to Use a WHERE...IN Subquery with Doctrine 2's Query Builder?

Einsatz von WHERE...IN-Unterabfragen im Query Builder von Doctrine 2

Dieses Beispiel zeigt das Abrufen von Bestellpositionen, die mit Bestellungen verknüpft sind, die einen bestimmten Artikel enthalten, und spiegelt die Funktionalität einer SQL-Abfrage wider:

Äquivalente SQL-Abfrage:

SELECT DISTINCT i.id, i.name, order.name 
FROM items i 
JOIN orders o ON i.order_id=o.id 
WHERE o.id IN (
   SELECT o2.id FROM orders o2
   JOIN items i2 ON i2.order_id=o2.id AND i2.id=5
)
AND i.id != 5
ORDER BY o.orderdate DESC
LIMIT 10;
Nach dem Login kopieren

Doctrine 2 Query Builder-Implementierung:

<?php // Access Doctrine's ExpressionBuilder
$expr = $em->getExpressionBuilder();

$qb = $em->createQueryBuilder();
$qb
    ->select(array('DISTINCT i.id', 'i.name', 'o.name'))
    ->from('Item', 'i')
    ->join('i.order', 'o')
    ->where(
        $expr->in(
            'o.id',
            $em->createQueryBuilder()
                ->select('o2.id')
                ->from('Order', 'o2')
                ->join('Item', 
                       'i2', 
                       \Doctrine\ORM\Query\Expr\Join::WITH, 
                       $expr->andX(
                           $expr->eq('i2.order', 'o2'),
                           $expr->eq('i2.id', '?1')
                       )
                )
                ->getDQL()
        )
    )
    ->andWhere($expr->neq('i.id', '?2'))
    ->orderBy('o.orderdate', 'DESC')
    ->setParameter(1, 5)
    ->setParameter(2, 5);
Nach dem Login kopieren

Wichtige Überlegungen:

  • Leistungseinschränkungen können bei der Behandlung von LIMIT-Klauseln in Unterabfragen durch Doctrine 2 auftreten.
  • Während die IN-Klausel herkömmlicherweise ein Array erwartet, unterstützt sie auch Unterabfragen.
  • Die Wiederverwendung desselben Parameters für beide id Instanzen wird aus Konsistenzgründen empfohlen, ist jedoch nicht unbedingt erforderlich.

Das obige ist der detaillierte Inhalt vonWie verwende ich eine WHERE...IN-Unterabfrage mit dem Query Builder von Doctrine 2?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage