”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何解决 Doctrine 左连接期间的“Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, got 'ON'\”错误?

如何解决 Doctrine 左连接期间的“Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, got 'ON'\”错误?

发布于2024-11-08
浏览:393

How to Resolve the \

如何在 Doctrine 中执行左连接

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

遇到的问题

在 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