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

Susan Sarandon
Freigeben: 2024-10-29 04:24:02
Original
521 Leute haben es durchsucht

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: 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>
Nach dem Login kopieren

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:

<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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
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