我想創(chuàng)建一個(gè)點(diǎn)對(duì)點(diǎn)聊天,我有三個(gè)模型,ChatMessage、聊天和用戶模型,聊天和用戶模型具有多對(duì)多關(guān)系,我創(chuàng)建了一個(gè)數(shù)據(jù)透視表“chat_user”,并在兩個(gè)模型上定義了belongToMany。當(dāng)用戶發(fā)起聊天時(shí),它會(huì)收到 userId 和接收者的 Id,函數(shù)如下: 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); }}這個(gè)想法是首先查找兩個(gè)用戶 ID 是否有共同的聊天模型,如果沒有,則創(chuàng)建一個(gè)新聊天并將兩個(gè)用戶附加到單個(gè)聊天中,并返回聊天 ID,否則返回聊天 ID。然而,此塊 $chat = Chat::find([$user -> id, $receiver -> id])->first();始終返回 id 與第一個(gè) userId 相關(guān)的所有聊天,即($user -> id)。我真正想要的是找到其集合中具有完全相同的兩個(gè) userId 的聊天,或者如果不存在則創(chuàng)建一個(gè)新的。我也嘗試過$chat = Chat::whereIn('id', [$user -> id,$receiver -> id])->get()這就像一個(gè) Or 語句,但需要一個(gè) AND 語句在偽代碼中我想要得到的是:
如何使用相關(guān)模型獲取模型
揚(yáng)帆大魚
2023-09-15 21:38:05