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.
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: Erwartet DoctrineORMQueryLexer::T_WITH, got 'ON'
Dieser Fehler tritt auf, wenn „ON“ in verwendet wird Join-Klausel anstelle von „WITH“. Um dieses Problem zu beheben, ersetzen Sie „ON“ durch „WITH“, wie unten gezeigt:
<code class="php">$qb->leftJoin('User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id')</code>
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:
<code class="php">$qb ->select('a', 'u') ->from('Credit\Entity\UserCreditHistory', 'a') ->leftJoin('a.user', 'u') ->where('u = :user') ->setParameter('user', $users) ->orderBy('a.created_at', 'DESC');</code>
In In diesem Fall stellt „CreditEntityUserCreditHistory#user“ die Zuordnung zwischen den beiden Entitäten dar.
Ohne Zuordnung:
Wenn keine Zuordnung vorhanden ist, können Sie die folgende Syntax verwenden:
<code class="php">$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');</code>
Diese Abfrage ruft Datensätze aus beiden Tabellen ab und gibt einen Ergebnissatz zurück, der Arrays im folgenden Format enthält:
<code class="php">array( array( 0 => UserCreditHistory instance, 1 => Userinstance, ), array( 0 => UserCreditHistory instance, 1 => Userinstance, ), // ... )</code>
Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, got \'ON\'\' bei Left Joins in Doctrine?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!