我当时正在laravel中进行聊天项目
我想获得多个用户一起参与的所有聊天
我阅读了where子句的文档,但找不到这种情况的解决方案
我进行了很多搜索,以找到可以满足我需要的任何神奇功能,但我找不到任何帮助
user --------- one to many ---> chat
recipient ---- one to one ----> user
chat --------- one to many ----> recipient
说我有一个这样的表
|--------------|----------------|----------------|
| id | user_id | chat_id |
|--------------|----------------|----------------|
| 1 | 1 | 2 |
| 2 | 2 | 2 |
| 3 | 3 | 2 |
| 4 | 3 | 1 |
| 5 | 2 | 3 |
| 6 | 2 | 1 |
|--------------|----------------|----------------|
我想获取用户[1,2,3]所在的chat_id
而且他们必须参加相同的聊天
我希望它返回2
// i tried this snippet but it's only returning the chats of a single user
$user_id = $request->user()['id'];
return Chat::whereHas('recipients', function ($query) use ($user_id) {
$query->where('user_id', $user_id);
})->get();
答案 0 :(得分:1)
使用whereIn()
并指定行数:
$user_ids = [1, 2, 3];
return Chat::has('recipients', '=', count($user_ids))
->whereHas('recipients', function ($query) use ($user_ids) {
$query->whereIn('user_id', $user_ids);
}, '=', count($user_ids))->get();