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