我使用的 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_id
FROM 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
我错过了第一个选择语句中的列。任何人都可以帮助解决这个问题吗?抱歉,迈克...