現在、mongodb の「メッセージ」コレクション内の既存の配列にオブジェクトをプッシュする際に問題が発生しています。
このコレクションは、「user_id」、「recipient」、および「messages」の 3 つのフィールドを持つ 2 人のユーザー間のメッセージの保存に使用されます。Messages フィールドは、メッセージ オブジェクトの配列を含む配列です。
作成時に、次の関数がトリガーされ、ドキュメントが期待どおりに mongodb に表示され、3 つのフィールドが正しく表示されます。さらに重要なことは、「messages」配列フィールドが表示され、内部に初期オブジェクトが含まれていることです。
public function sendDirectMessage(Request $request)
{
$user = User::find($request->user()->id);
$data = $request->only(['message', 'recipient']);
broadcast(new DirectMessageEvent($data, $user))->toOthers(); //only broadcast new message sent event to recipient user
//Check conversation between two users exists
$chat = Message::where('user_id', '=', $user->id)->where('recipient', '=', $request->recipient)->get();
//if doesnt exist, create new document
if($chat->count() == 0){
Message::create([
'user_id' => $user->id,
'recipient' => $request->recipient,
'messages' => array([
"from" => $user->first_name,
"message" => $request->message
]) //messages stored as subcollection
]);
}
ただし、2 人のユーザー間の既存の会話が既に存在し、受信したメッセージ オブジェクトをメッセージ配列にプッシュしようとすると、コードは正常に実行されますが、オブジェクトはメッセージ配列に表示されません。
else {
//push message to messages array
$chat->push('messages', ([
'from' => 'Jane Doe',
'message' => 'Hi John',
]));
dd($chat);
}
return response()->json([
"Message" => "Successfully sent a private message to user ".$request->recipient
], 200);
}
これに関するヘルプは大歓迎です。