我正在尝试使用学说查询构建器构建一个查询,该构建器将这样一个不相关的表加入其中:
$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
任何想法我在做什么错?
今天,我正在从事类似的工作,并记得我打开了这个问题。我不知道它从哪个版本开始起作用,但是现在您可以轻松地将子类加入继承映射中。因此,这样的查询可以正常工作:
$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);
我在使用继承映射的父类中启动查询。在我以前的文章中,这是一个不同的起点,但如果我没记错的话,这是一个相同的问题。
因为当我开始这个问题时这是一个大问题,所以我认为对于其他不了解它的人来说也可能很有趣。