Heim >Backend-Entwicklung >PHP-Tutorial >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?

Susan Sarandon
Susan SarandonOriginal
2024-10-29 04:24:02530Durchsuche

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>

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>

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!

Stellungnahme:
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