laravel雄辩地获得多个用户之间的所有常见聊天

时间:2019-04-05 18:48:54

标签: php laravel eloquent

我当时正在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();

1 个答案:

答案 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();