我有一个 Conversation
型号,有很多 ConversationMessage
型号 .
现在我想根据对话的最后一条消息来订购对话 . 基本上像whatsapp . 如何构建查询?
作为我的代码的旁注:Conversation包含一个用户( user_id
)和一个关联的公司( company_id
) . 公司与用户有 belongsToMany
关系 .
Conversation::whereHas('company', function ($q) use ($userId) {
$q->whereHas('users', function ($q1) use ($userId) {
$q1->where('users.id', $userId);
});
})->orWhereHas('user', function($q) use ($userId) {
$q->where('user.id', $userId);
})->with(array('conversationMessage' => function($q) {
$q->orderBy('created_at', 'DESC');
})->get();
这命令 ConversationMessage
关系模型,但不是对话 . 如何根据最后一条消息订购 Conversations
?
1 回答
您可以将
timestamp
字段(如last_message_at
)添加到Conversations
模型中,并且当新的消息添加到该字段的Conversation
更新时,稍后您可以根据last_message_at
对结果进行排序 .或者您可以在下面的查询中过滤结果(测试它是否有效):