當使用複雜的資料模型時,有必要透過建立多個表之間的關係來從多個表中檢索資料。左連接允許您從一個表中獲取所有行,並且僅從另一個表中獲取匹配的行。
在Doctrine 中嘗試左連接時可能出現的常見錯誤正在接收以下語法錯誤:
[Syntax Error] line 0, col 98: Error: Expected Doctrine\ORM\Query\Lexer::T_WITH, got 'ON'
當“連接子句中使用“ON”而不是“WITH”。要解決此問題,請將“ON”替換為“WITH”,如下所示:
$qb->leftJoin('User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id')
要在Doctrine 中執行左連接,有兩種方法:
具有關聯:
如果您的實體與要加入的表有關聯,則可以使用以下語法:
$qb
->select('a', 'u')
->from('Credit\Entity\UserCreditHistory', 'a')
->leftJoin('a.user', 'u')
->where('u = :user')
->setParameter('user', $users)
->orderBy('a.created_at', 'DESC');
在這種情況下,「Credit\Entity\UserCreditHistory#user」表示兩個實體之間的關聯。
沒有關聯:
如果不存在關聯,可以使用以下語法:
$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');
此查詢從兩個表中擷取記錄並傳回包含以下格式陣列的結果集:
array(
array(
0 => UserCreditHistory instance,
1 => Userinstance,
),
array(
0 => UserCreditHistory instance,
1 => Userinstance,
),
// ...
)
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3