首頁  >  文章  >  後端開發  >  如何解決 Doctrine 左連接期間的「Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, got 'ON'\」錯誤?

如何解決 Doctrine 左連接期間的「Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, got 'ON'\」錯誤?

Susan Sarandon
Susan Sarandon原創
2024-10-29 04:24:02522瀏覽

How to Resolve the

如何在Doctrine 中執行左連接

當使用複雜的資料模型時,有必要透過建立多個表之間的關係來從多個表中檢索資料。左連接允許您從一個表中獲取所有行,並僅從另一個表中獲取匹配的行。

遇到的問題

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn