我想创建一个点对点聊天,
我有三个模型,ChatMessage、聊天和用户模型,聊天和用户模型具有多对多关系,我创建了一个数据透视表“chat_user”,并在两个模型上定义了belongToMany。
当用户发起聊天时,它会收到 userId 和接收者的 Id,函数如下:
public function InitSingleChat(Request $request)
{
$user = auth()->user();
$receiver = User::findOrFail($request->receiver_id);
if ($user) {
if ($receiver) {
$chat = Chat::find([$user -> id, $receiver -> id])->first();
if ($chat) {
return response()->json(['channel' => "private-chat-" . $chat->id, 'chat' => $chat]);
} else {
$chat = new Chat();
$chat -> save();
$chat -> users() -> attach($user);
$chat -> users() -> attach($receiver);
return response()->json(['channel' => "private-chat-" . $chat->id, 'chat' => $chat]);
}
} else {
return response()->json('Receiver not found', 404);
}
} else {
return response()->json('You are not signed in', 401);
}
}
这个想法是首先查找两个用户 ID 是否有共同的聊天模型,如果没有,则创建一个新聊天并将两个用户附加到单个聊天中,并返回聊天 ID,否则返回聊天 ID。
然而,此块 $chat = Chat::find([$user -> id, $receiver -> id])->first();始终返回 id 与第一个 userId 相关的所有聊天,即($user -> id)。
我真正想要的是找到其集合中具有完全相同的两个 userId 的聊天,或者如果不存在则创建一个新的。
我也尝试过$chat = Chat::whereIn('id', [$user -> id,$receiver -> id])->get()这就像一个 Or 语句,但需要一个 AND 语句
在伪代码中我想要得到的是:
杨魅力