„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie behebe ich den Fehler „Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, got \'ON\'\“ bei Left Joins in Doctrine?

Wie behebe ich den Fehler „Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, got \'ON\'\“ bei Left Joins in Doctrine?

Veröffentlicht am 08.11.2024
Durchsuche:745

How to Resolve the \

So führen Sie Left Joins in Doctrine durch

Bei der Arbeit mit komplexen Datenmodellen ist es notwendig, Daten aus mehreren Tabellen abzurufen, indem Beziehungen zwischen ihnen hergestellt werden. Mit Left-Joins können Sie alle Zeilen aus einer Tabelle und nur die passenden Zeilen aus der anderen Tabelle abrufen.

Problem aufgetreten

Ein häufiger Fehler, der beim Versuch eines Left-Joins in Doctrine auftreten kann, ist der Empfang der folgende Syntaxfehler:

[Syntaxfehler] Zeile 0, Spalte 98: Fehler: Expected Doctrine\ORM\Query\Lexer::T_WITH, got 'ON'

Dieser Fehler tritt auf, wenn „ ON“ wird in der Join-Klausel anstelle von „WITH“ verwendet. Um dieses Problem zu beheben, ersetzen Sie „ON“ durch „WITH“, wie unten gezeigt:

$qb->leftJoin('User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id')

Implementieren von Left Joins

Um einen Left Join in Doctrine durchzuführen, gibt es zwei Ansätze:

Mit einer Assoziation:

Wenn Ihre Entität eine Assoziation mit der Tabelle hat, der Sie beitreten möchten, können Sie die folgende Syntax verwenden:

$qb
    ->select('a', 'u')
    ->from('Credit\Entity\UserCreditHistory', 'a')
    ->leftJoin('a.user', 'u')
    ->where('u = :user')
    ->setParameter('user', $users)
    ->orderBy('a.created_at', 'DESC');

In diesem Fall stellt „Credit\Entity\UserCreditHistory#user“ die Zuordnung zwischen den beiden Entitäten dar.

Ohne Assoziation:

Wenn keine Assoziation vorhanden ist, können Sie die folgende Syntax verwenden:

$qb
    ->select('a', 'u')
    ->from('Credit\Entity\UserCreditHistory', 'a')
    ->leftJoin(
        'User\Entity\User',
        'u',
        \Doctrine\ORM\Query\Expr\Join::WITH,
        'a.user = u.id'
    )
    ->where('u = :user')
    ->setParameter('user', $users)
    ->orderBy('a.created_at', 'DESC');

Diese Abfrage ruft Datensätze aus beiden Tabellen ab und gibt einen Ergebnissatz zurück, der Arrays im folgenden Format enthält:

array(
    array(
        0 => UserCreditHistory instance,
        1 => Userinstance,
    ),
    array(
        0 => UserCreditHistory instance,
        1 => Userinstance,
    ),
    // ...
)
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3