0s1*_*r1s 30 php mysql doctrine query-builder symfony
我正在尝试使用doctrine查询构建器构建一个查询,该构建器连接一个非相关的表,如下所示:
$query = $this->createQueryBuilder('gpr')
->select('gpr, p')
->innerJoin('TPost', 'p')
->where('gpr.contentId = p.contentId')
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我仍然收到一个错误:
错误:标识变量TPost在连接路径表达式中使用但之前未定义.
我搜索了这个错误消息,每个人都回答使用表别名+属性,如p.someAttribute.但是我要加入的表格在表格中没有关系,我开始从中选择.
作为一个普通的mysql查询,我会这样写:
SELECT * FROM t_group_publication_rel gpr
INNER JOIN t_post p
WHERE gpr.content_id = p.content_id
Run Code Online (Sandbox Code Playgroud)
我有什么想法吗?
0s1*_*r1s 68
今天我正在做类似的工作,并记得我打开了这个问题.我不知道从哪个学说版本开始工作,但是现在你可以轻松地在继承映射中加入子类.所以像这样的查询没有任何问题:
$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);
Run Code Online (Sandbox Code Playgroud)
我在我的父类中使用继承映射启动查询.在我之前的帖子中,这是一个不同的起点,但如果我没记错的话也是同样的问题.
因为当我开始这个问题时这是一个大问题,我认为对于其他不了解它的人来说这也很有趣.
小智 6
在版本2.4之前,无法实现没有关联的实体之间的连接,您可以使用以下语法生成任意连接:
$query = $em->createQuery('SELECT u FROM User u JOIN Blacklist b WITH u.email = b.email');
Run Code Online (Sandbox Code Playgroud)
参考:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html