laravel雄辩,我如何分组为2列的关系

kyvafyod  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(361)

我有一个如下所示的消息表:
身份证件
用户id
目标用户id
消息
我想做的是通过对话来分组。
所以一些典型的记录可以是这样的:


# 1

user_id = 5
target_user_id = 10
message = hello

# 2

user_id = 10
target_user_id = 5
message = hello

# 3

user_id = 15
target_user_id = 20
message = hello

# 2

user_id = 15
target_user_id = 20
message = hello

我想实现的是如何将所有记录组合在一起,以便用户5和10之间的所有消息(例如)都在一个组中,15和20之间的所有消息都在一个组中,并按最新消息排序。
这是我目前的尝试:

$msgs = Message::with('user')
     ->where(function($q) {
     $q->where('user_id', Auth::user()->id)
        ->orWhere('target_user_id', Auth::user()->id);
     })
     ->groupBy('user_id', 'target_user_id')
            ->get();

这不是一个重复,因为问题和问题是非常不同的,解决方案建议有什么我已经尝试了以上,如果你能看到。

0pizxfdo

0pizxfdo1#

我想你可以这样把他们分组:

$msgs = Message::with('user')
             ->where(function($q) {
             $q->where('user_id', Auth::user()->id)
                ->orWhere('target_user_id', Auth::user()->id);
             })
    ->get();

$groupedMessages = $msgs->groupBy(function ($message) {
    return min($message->user_id, $message->target_user_id) .'-'. max($message->user_id, $message->target_user_id);
});

相关问题