php - 如何使实体/表子查询内部联接本身 - NativeQuery/DQL Symfony 2

标签 php mysql symfony doctrine-orm dql

我有这个查询(运行良好)。

$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() 构建 native 查询,但尚未成功。

P.s.使用 ResultSetMapping() 我无法使关系字段正常工作。我尝试过修改 addJoinedEntityResult() 等......:

$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);

最佳答案

我通过使用两个查询解决了该问题。

此获取线程的最新消息:

$messages_max = $em->createQueryBuilder()
->select('max(m.id) as id')
->from('BaseBundle:PsMessage', 'm')
->groupBy('m.thread')
->getQuery()
->getResult();

这一个显示所有线程:

$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);

关于php - 如何使实体/表子查询内部联接本身 - NativeQuery/DQL Symfony 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42174992/

相关文章:

mysql - MySQL如何限制单个数据库的连接数

MySQL 'order clause' 中的未知列

symfony - 如何在数据库中添加JSON字段?

symfony2 : How to remove related entity with doctrine/restrict annotation?

php - 如何使用html5 webstorage保存页面?

PHP 似乎正在向后评估 if 语句

导致 404 文件未找到页面的 php mail() 函数

php - 新用户注册时发送激活邮件

mysql - 将一列的值复制到新表

php - Symfony2 MongoDB 多连接错误