首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使实体/表子查询自身内部连接- NativeQuery/DQL Symfony 2

如何使实体/表子查询自身内部连接- NativeQuery/DQL Symfony 2
EN

Stack Overflow用户
提问于 2017-02-11 10:52:31
回答 1查看 103关注 0票数 0

我有这个查询(它运行得很好)。

代码语言:javascript
复制
$sql = 'select * from ps_message p1 INNER JOIN (SELECT MAX(p2.id) as max_id FROM ps_message p2 GROUP BY p2.thread_id) as max_table on p1.id = max_table.max_id';

我想将它转换为我的Symfony2项目。

我尝试过使用createQueryBuilder()构建DQL查询,并使用ResultSetMapping()/ResultSetMappingBuilder()构建原生查询,但尚未成功。

附注:使用ResultSetMapping(),我无法使关系字段工作。我尝试过修改addJoinedEntityResult(),等等。

代码语言:javascript
复制
$rsm = new ResultSetMapping();
$rsm->addEntityResult('BaseBundle:PsMessage', 'p1');
$rsm->addFieldResult('p1', 'id', 'id');
$rsm->addFieldResult('p1', 'message_text', 'messageText');
$rsm->addFieldResult('p1', 'message_type', 'messageType');
$rsm->addFieldResult('p1', 'receiver_message_status', 'receiverMessageStatus');
$rsm->addFieldResult('p1', 'sender_message_status', 'senderMessageStatus');
$rsm->addFieldResult('p1', 'created_date', 'createdDate');
$rsm->addFieldResult('p1', 'modified_date', 'modifiedDate');

$rsm->addFieldResult('t1', 'thread_id', 'thread_id'); //Error
$rsm->addFieldResult('u', 'sender_id', 'sender'); //Error
$rsm->addFieldResult('t', 'thread_id', 'thread'); //Error
$rsm->addFieldResult('p2', 'thread_id', 'thread'); //Error

$sql = 'select * from ps_message p1 INNER JOIN (SELECT MAX(p2.id) as max_id FROM ps_message p2 GROUP BY p2.thread_id) as max_table on p1.id = max_table.max_id';
$query = $em->createNativeQuery($sql, $rsm);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-23 08:05:18

我使用两个查询解决了这个问题。

这一条获得线程的最新消息:

代码语言:javascript
复制
$messages_max = $em->createQueryBuilder()
->select('max(m.id) as id')
->from('BaseBundle:PsMessage', 'm')
->groupBy('m.thread')
->getQuery()
->getResult();

这个显示所有线程:

代码语言:javascript
复制
$qb = $em->createQueryBuilder()
->select('message')
->from('BaseBundle:PsMessage', 'message')
->where('message.receiver = :id')
->orWhere('message.sender = :id')
->andWhere('message.id in (:maxIds)')
->orderBy('message.modifiedDate', 'desc')
->setParameter('id', $userId)
->setParameter('maxIds', $messages_max);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42174992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档