在阅读Doctrine 2文档at this page时,我可以看到它们有2种方法为内部联接指定条件:

// Example - $qb->expr()->innerJoin('u.Group', 'g', Expr\Join::WITH, 'g.manager_level = 100');
// Example - $qb->expr()->innerJoin('u.Group', 'g', 'WITH', $qb->expr()->eq('g.manager_level', '100'));
public function innerJoin($join, $alias, $conditionType = null, $condition = null); // Returns Expr\Join instance




// Example - $qb->innerJoin('u.Group', 'g', Expr\Join::ON, $qb->expr()->and($qb->expr()->eq('u.group_id', 'g.id'), 'g.name = ?1'))
// Example - $qb->innerJoin('u.Group', 'g', 'ON', 'u.group_id = g.id AND g.name = ?1')
public function innerJoin($join, $alias = null, $conditionType = null, $condition = null);


我不明白其中的区别,因为innerjoin仅在找到匹配项时才返回内容,而我也找不到有关此内容的任何文档。

谢谢

最佳答案

看起来它们是同义词。基于Doctrine EBNF表达(位于http://docs.doctrine-project.org/en/2.0.x/reference/dql-doctrine-query-language.html#from-join-and-index-by),似乎Doctrine更喜欢WITH。但是,MySQL(可能还有其他SQL数据库)使用ON,因此我的猜测是Doctrine的作者包括了该表达式以避免混淆用户。

Doctrine的开发人员已经编写了自己的SQL变体-这是因为Doctrine是对象关系管理器(ORM),而不是简单明了的查询生成器。它们的SQL变体旨在与它们的对象一起使用。因此,例如,如果您要构建usergroup模型并希望表达它们之间的关系,则可以使用Doctrine的查询语言来完成,它将自动处理JOIN条件。

10-01 04:45
查看更多