当使用复杂的数据模型时,有必要通过建立多个表之间的关系来从多个表中检索数据。左连接允许您从一个表中获取所有行,并且仅从另一表中获取匹配的行。
在 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