當使用複雜的資料模型時,有必要透過建立多個表之間的關係來從多個表中檢索資料。左連接允許您從一個表中獲取所有行,並僅從另一個表中獲取匹配的行。
在Doctrine 中嘗試左連接時可能出現的常見錯誤正在接收以下語法錯誤:
[Syntax Error] line 0, col 98: Error: Expected DoctrineORMQueryLexer::T_WITH, got 'ON'
當在連接子句而不是「WITH」。要解決此問題,請將“ON”替換為“WITH”,如下所示:
<code class="php">$qb->leftJoin('User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id')</code>
要在Doctrine 中執行左連接,有兩種方法:
具有關聯:
如果您的實體與要加入的表有關聯,您可以使用以下語法:
<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在這種情況下,「CreditEntityUserCreditHistory#user」表示兩個實體之間的關聯。
沒有關聯:
如果不存在關聯,可以使用以下語法:
<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>
此查詢從兩個表中擷取記錄並傳回包含以下格式陣列的結果集:
<code class="php">array( array( 0 => UserCreditHistory instance, 1 => Userinstance, ), array( 0 => UserCreditHistory instance, 1 => Userinstance, ), // ... )</code>
以上是如何解決 Doctrine 左連接期間的「Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, got 'ON'\」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!