我似乎无法解决这个问题,因为mysql不是我的强项。我在这里做了一些研究,但不能把两个和两个放在一起,所以我转向社区寻求帮助。
我正在我的Laravel应用程序中构建聊天功能,其中两个用户可以互相交谈。我无法弄清楚如何构建收件箱(将对话组合在一起)的一部分。我已经弄明白了如何通过发送最后一条消息进行分组。
以下内容属于User
模型:
public function lastMessages() {
return $this->hasMany('App\Message', 'recipient_id')
->select('*')
->join(DB::raw('(Select max(id) as id from messages group by author_id) LatestMessage'), function($join) {
$join->on('messages.id', '=', 'LatestMessage.id');
})
->orderBy('created_at', 'desc');
}
我的留言表包含以下内容:author_id
,recipient_id
,messaged
,viewed
。
我需要做的是分组消息,无论是传入我们的传出消息还是将最新消息显示为收件箱条目,一旦我点击该消息,其余的对话就会弹出页面。
我上面显示的当前sql只给出了最后一条消息,而不是整个对话。
提前感谢所有帮助。
答案 0 :(得分:0)
首先,我认为你应该将关系函数与逻辑(查询)函数分开。 如果我理解你的问题,你应该这样做:
Message::where('recipient_id',$userid)->orWhere('author_id',$userid)->orderBy('created_at','desc')->get();
这将为您提供用户发送或接收的消息。如果这不是您想要的,请使用Author
和Message
模型澄清您的问题。