CakePHP-创建子查询

CakePHP-创建子查询,cakephp,subquery,cakephp-3.0,nested-query,Cakephp,Subquery,Cakephp 3.0,Nested Query,我使用的CakePHP版本是3.x 我需要cakePHP来创建以下sql语句: SELECT messages.id, message, receiver_id, sender_id, conversation_id, users.id, users.username FROM ( SELECT messages.id, message, receiver_id, sender_id, conversation_id FROM messages as messages

我使用的CakePHP版本是3.x 我需要cakePHP来创建以下sql语句:

    SELECT messages.id, message, receiver_id, sender_id, conversation_id, users.id, users.username FROM 
(
    SELECT messages.id, message, receiver_id, sender_id, conversation_id
    FROM messages as messages
    ORDER BY created DESC
) AS messages
left join users on (users.id = sender_id)
WHERE (sender_id = 13 or receiver_id =13)
GROUP BY conversation_id; 
我使用了queryBuilder,但我并不真正理解我在做什么

这是我的蛋糕代码:

$subquery = $messages->find()
        ->order(['Messages.created' => 'DESC']);
    debug($neededMessages = $messages->find('all')
        ->select()
        ->group('Messages.conversation_id')
        ->contain(['Users'])
        ->where(['OR' => ['sender_id' => $userId, ['receiver_id' => $userId]]]));
    $neededMessages->execute();
我认为这只是一个小错误。 调试输出如下所示: 选择选择Messages.id作为Messages\uu id,Messages.subject作为Messages\uu subject,Messages.message作为Messages\uu message,Messages.created作为Messages\uu created,Messages.conversation\u id作为Messages\uu conversation\u id,Messages.is\u新建作为Messages\uu新建,Messages.receiver\u id作为Messages\uu receiver\u id,Messages.sender\u id作为Messages\u sender\u id来自Messages Messages ORDER BY Messages.created DESC FROM Messages Messages internal JOIN users ON users.id=Messages.sender\u id其中sender\u id=:c0或receiver\u id=:c1按Messages分组对话\u id

我缺少第一个select语句中的列。 在这个问题上有人能帮忙吗?
grretings maik…

所以,我有我需要的结果。 唯一困扰我的是,我现在有数组,没有对象。这是我的密码:

$conn=ConnectionManager::获取“默认值”; $stmt=$conn->query'SELECT maxm.id作为message\u id,message,receiver\u id,sender\u id,m.conversation\u id,users.id作为user\u id,users.username来自SELECT id,message,receiver\u id,sender\u id,conversation\u id来自messages order by created desc as m left加入m.sender\u id上的用户作为m.conversation\u id按m.conversation\u id分组'; $messages=$stmt->fetchAll'assoc'; $this->set'messages',$messages


如果能从其他cake用户那里了解他们是如何解决这个“问题”的,那就太好了。

你应该清楚地添加关于CakePHP版本和数据库模式的信息。对不起,CakePHP 3.x我在我的帖子中添加了这个信息:谢谢这只是一个毫无意义的例子,对吗?因为子查询没有做任何特殊的事情,因此它的使用是必要的。无论如何,我想问题最终将是您不能轻易地打开字段别名,这在子查询中是必要的,因为否则您将以Messages.id等字段作为Messages\uu id结束,这将导致Messages.id的外部选择失败。也许可以问问IRC上的ORM巫师兼兼职小妖精驯兽师jose_zap,他是否知道解决办法。嘿,jose_zap在这里。我正在写答案,但意识到你的问题没有多大意义。你想做的事情中有什么遗漏吗?似乎你只是想从消息中编写select*,加入用户。。。哪里按会话分组\u id按创建的描述排序