0

我使用的 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();

我认为这只是那里的一个小错误。Cakes 调试输出是这样的: SELECT (SELECT Messages.id AS Messages__id, Messages.subject AS Messages__subject, Messages.message AS Messages__message, Messages.created AS Messages__created, Messages.conversation_id AS Messages__conversation_id, Messages.is_new AS Messages__is_new, Messages.receiver_id AS Messages__receiver_id, Messages.sender_id AS Messages__sender_idFROM messages消息 ORDER BY Messages.created DESC) FROM 消息 Messages INNER JOIN users 用户 ON Users.id = (Messages.sender_id) WHERE (sender_id = :c0 OR receiver_id = :c1) GROUP BY Messages.conversation_id

我错过了第一个选择语句中的列。任何人都可以帮助解决这个问题吗?抱歉,迈克...

4

1 回答 1

0

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

$conn = ConnectionManager::get('default'); $stmt = $conn->query('SELECT max(m.id) as message_id, message, receiver_id, sender_id, m.conversation_id, users.id as user_id, users.username from (select id, message, receiver_id, sender_id, conversation_id from messages order by created desc) as m left join users as users on (m.sender_id = users.id) group by m.conversation_id'); $messages = $stmt->fetchAll('assoc'); $this->set('messages', $messages);

很高兴从其他蛋糕用户那里了解他们如何解决这个“问题”......

于 2015-01-06T14:19:12.730 回答