Mysql 通过最新消息Laravel进行分组对话

Mysql 通过最新消息Laravel进行分组对话,mysql,laravel,laravel-5.1,Mysql,Laravel,Laravel 5.1,我似乎无法理解这一点,因为mysql不是我的强项。我在这里做了一些研究,但不能把两者结合起来,所以我向社区寻求一些帮助 我正在我的Laravel应用程序中建立一个聊天功能,两个用户可以相互交谈。我不知道如何构建收件箱(将对话分组)部分的内容。我已经知道如何通过发送最后一条消息来对其进行分组 以下内容在我的用户型号中: public function lastMessages() { return $this->hasMany('App\Message', 'recipient_id

我似乎无法理解这一点,因为mysql不是我的强项。我在这里做了一些研究,但不能把两者结合起来,所以我向社区寻求一些帮助

我正在我的Laravel应用程序中建立一个聊天功能,两个用户可以相互交谈。我不知道如何构建收件箱(将对话分组)部分的内容。我已经知道如何通过发送最后一条消息来对其进行分组

以下内容在我的
用户
型号中:

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');
}
“我的邮件”表由以下内容组成:
作者id
收件人id
已发邮件
已查看

我需要做的是分组消息,无论是传入还是传出,并将最新消息显示为收件箱条目,一旦我单击这些消息,其余的对话就会弹出页面

上面显示的当前sql只给我最后一条消息,而不是整个对话


首先,我认为您应该将关系函数与逻辑(查询)函数分开。 如果我正确理解了你的问题,你应该这样做:

Message::where('recipient_id',$userid)->orWhere('author_id',$userid)->orderBy('created_at','desc')->get();

这将为您提供用户发送或接收的消息。如果这不是您想要的,请使用
作者
消息
模型澄清您的问题

我已经这样做了,但这会在数组中提供重复的条目。如果recipient id=$user id和author\u id=$user id,它将生成两个重复项,我尝试按recipient\u id分组,但这忽略了author\u id,反之亦然。我希望老师们几乎需要同时按收信人和作者进行分组。。。