一尘不染

Symfony 2:使用理论查询生成器在不相关的表上进行INNER JOIN

mysql

我正在尝试使用学说查询构建器构建一个查询,该构建器将这样一个不相关的表加入其中:

$query = $this->createQueryBuilder('gpr')
        ->select('gpr, p')
        ->innerJoin('TPost', 'p')
        ->where('gpr.contentId = p.contentId')

但这是行不通的。我仍然收到错误消息:

错误:标识变量TPost用于联接路径表达式中,但之前未定义。

我搜索了此错误消息,每个人都回答使用表别名+属性,例如p.someAttribute。但是我要联接的表与我从中选择的表无关。

作为普通的mysql查询,我会这样写:

SELECT * FROM t_group_publication_rel gpr 
INNER JOIN t_post p 
WHERE gpr.content_id = p.content_id

任何想法我在做什么错?


阅读 237

收藏
2020-05-17

共1个答案

一尘不染

今天,我正在从事类似的工作,并记得我打开了这个问题。我不知道它从哪个版本开始起作用,但是现在您可以轻松地将子类加入继承映射中。因此,这样的查询可以正常工作:

$query = $this->createQueryBuilder('c')
        ->select('c')
        ->leftJoin('MyBundleName:ChildOne', 'co', 'WITH', 'co.id = c.id')
        ->leftJoin('MyBundleName:ChildTwo', 'ct', 'WITH', 'ct.id = c.id')
        ->orderBy('c.createdAt', 'DESC')
        ->where('co.group = :group OR ct.group = :group')
        ->setParameter('group', $group)
        ->setMaxResults(20);

我在使用继承映射的父类中启动查询。在我以前的文章中,这是一个不同的起点,但如果我没记错的话,这是一个相同的问题。

因为当我开始这个问题时这是一个大问题,所以我认为对于其他不了解它的人来说也可能很有趣。

2020-05-17