首页 >后端开发 >php教程 >如何解决 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:02531浏览

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