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