如何在 Doctrine 中执行左连接:解决语法错误和意外结果
在 Doctrine 中,左连接允许您检索数据来自两个或多个表,同时可以选择包含左表中的行,即使右表中没有匹配的行。要执行左连接,您可以使用 leftJoin 方法。
但是,在执行左连接时您可能会遇到一些陷阱。让我们解决一个常见问题并提供解决方案。
问题:
“语法错误:预期的 DoctrineORMQueryLexer::T_WITH,已 'ON'
说明:
在原始代码中,您在 leftJoin 方法中使用了“ON”而不是“WITH”,左连接的正确语法是:
$qb->leftJoin('User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id')
已更新。代码:
将上述代码中的“ON”替换为“WITH”将解决语法错误。
另一个问题:
“只有 1 个值来自正在显示连接列。”
说明:
如果您在表之间定义了关联(示例中的 CreditEntityUserCreditHistory#user),则可以使用简化版本的左连接:
$qb->leftJoin('a.user', 'u')
这将根据关联自动执行左连接。如果没有定义关联,您可以使用更明确的语法:
$qb->leftJoin( 'User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id' )
结果:
左连接将生成一个结果集,其中包括两个表中的行,以及右表中的可选匹配结果将作为数组返回,其中每个元素都是实体数组:
array( array( 0 => UserCreditHistory instance, 1 => User instance ), array( 0 => UserCreditHistory instance, 1 => User instance ), // ... )
以上是Left Join in Doctrine:如何避免语法错误并获得预期结果?的详细内容。更多信息请关注PHP中文网其他相关文章!