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: 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')
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,
),
// ...
)
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