Cakephp - 最后一条消息

时间:2015-03-08 13:31:47

标签: cakephp

//消息属于用户

var $belongsTo = array(
    'FromId'=>array(
        'className'=>'User',
        'foreignKey'=>'sender_id'
    ),
    'ToId'=>array(
        'className'=>'User',
        'foreignKey'=>'recipient_id'
    )); //end belongsto

sender_id号码1在2015-03-08 10:30:10发送“hi”给recipient_id 2

sender_id号码1在2015-03-08 11:00:20发送“Hello”给recipient_id 2

我的目的是选择最后一条消息(你好)和创建的最大日期(2015-03-08 11:00:20)

这是我的查询

    $idAuth = $this->Auth->user('id');
$conversationInProgress = $this->Message->find('first', array(
        'fields'=> array(
                'ToId.id','Message.content', 'Message.conversation_id', 'MAX(Message.created) AS created'),
        'conditions' => array( 
                    'OR' => array(
                        array('Message.sender_id' => $idAuth),
                        array('Message.recipient_id' => $idAuth))),
        'group' => 'Message.conversation_id',
        'order' => array('Message.created DESC')));

在我的结果下面:

array(
'ToId' => array(
    'id' => '2'
),
'Message' => array(
    'content' => 'hi',
    'conversation_id' => '0fb6dcd8e1'
),
(int) 0 => array(
    'created' => '2015-03-08 11:00:20'
))

预期结果: 链接到最大创建的内容(2015-03-08 11:00:20)是“你好”而不是“你好”。

你能帮帮我吗。

由于


它适用于子查询,但我面临另一个问题

在我的代码下面

$conditionsSubQuery = array(
            'OR' => array(
                        array('sender_id' => $idAuth),
                        array('recipient_id' => $idAuth)));

        $db = $this->Message->getDataSource();
        $subQuery = $db->buildStatement(
            array(
                'fields'     => array('MAX(id)'),
                'table'      => $db->fullTableName($this->Message),
                'alias'      => 'SubTable',
                'limit'      => null,
                'offset'     => null,
                'joins'      => array(),
                'conditions' => $conditionsSubQuery,
                'order'      => 'id DESC',
                'group'      => 'conversation_id'
            ),
            $this->Message
        );

        $subQuery = ' Message.id IN (' . $subQuery . ') ';

        $subQueryExpression = $db->expression($subQuery);
        $conditions[] = $subQueryExpression;
        $conversationInProgress = $this->Message->find('all', compact('conditions'));

$这 - >设置(紧凑( 'conversationInProgress'));

此查询显示正确的内容和正确的ID 但即使我将'order'设置为'id DESC',它也会在id号17之前显示id号15

结果应该是: 第一条记录:id 17和 第二条记录:id 15

有办法解决这个问题吗?

谢谢

0 个答案:

没有答案