会话列表会多次重复相同的名称

时间:2017-10-29 07:58:51

标签: php yii2

这是我的代码来自控制器的消息。在消息中心,我离开了列,显示了对话列表。问题是,如果用户收到来自同一发件人的多封邮件,那么在会话列表中会有多次相同的发件人姓名(请参见下图),我希望这些邮件具有相同的发件人和#39;会话列表中的名称只有一次。

    // get recent messages to show in left column
    $recent = Message::find()
            ->with('sentFrom')
            ->where(['sent_to' => Yii::$app->user->identity->id])
            ->andfilterWhere([
                'or', 
                ['like', 'subject', $search_subject],
                ['like', 'sent_from', $search_sender],
                ])
            ->orderBy('created_at DESC')
            ->limit(Yii::$app->params['message_chat']['recent_limit'])
            ->all();

1 个答案:

答案 0 :(得分:0)

如果您想从某个发件人的姓名中获取最后一封邮件,请尝试在groupBy

中使用yii2 query声明
$recent = Message::find()
            ->with('sentFrom')
            ->where(['sent_to' => Yii::$app->user->identity->id])
            ->andfilterWhere([
                'or', 
                ['like', 'subject', $search_subject],
                ['like', 'sent_from', $search_sender],
                ])
            ->orderBy('created_at DESC')
            ->grouoBy([tablne_name.primaryKey])    
            ->limit(Yii::$app->params['message_chat']['recent_limit'])
            ->all();

其中:

table_name - the mane of table used in sentFrom relation
primaryKey - the primary key of table_name or something other 
             unique, in your case it's maybe something like sender id

此查询将返回具有唯一primaryKey值的所有消息。