【发布时间】:2021-06-22 04:13:53
【问题描述】:
我有 2 张桌子用于聊天系统
“用户”表结构:
| id | name |
|---|
“消息”表结构:
| id | sender_id | receiver_id | message |
|---|
我想返回上次你和朋友聊天时订购的朋友用户。
注意:id 与时间戳相同
假设,
| id | sender_id | receiver_id | message |
|---|---|---|---|
| 1 | $userA->id |
$userB->id |
abc |
| 2 | $userC->id |
$userA->id |
xyz |
所以,如果 $userA 是登录用户 - 我希望用户返回如下:
[
0 => $userC,
1 => $userB,
2 => $userD,
3 => $userE,
4 => $userF,
...
]
(其中$userD、$userE、$userF 没有与用户$userA 的消息)
基本上,如果用户与登录用户有任何消息,我想返回所有使用排序的朋友用户。
我当前的代码给了我一些意想不到的结果 -
return DB::table('users')->leftJoin('messages', function ($join) {
$join->on('users.id', '=', 'messages.sender_id')
->where('messages.sender_id', auth()->id())
->orOn('users.id', '=', 'messages.receiver_id')
->where('messages.receiver_id', auth()->id());
})
->select('users.*')
->where('users.id', '!=', auth()->id())
->orderBy('messages.id', 'asc')
->get();
【问题讨论】:
标签: laravel laravel-query-builder