أنا أعمل على تطبيق دردشة باستخدام Laravel ، وأحتاج إلى مساعدة في فرز الرسائل بشكل صحيح. يعمل التطبيق دون ظهور اي مشكلة ولكنه يسترد جميع الرسائل التي أرسلها المستخدم الحالي إلى أي شخص ، بالإضافة إلى الرسائل المرسلة إلى المستخدم الحالي من قبل أي شخص. أريده فقط استرداد الرسائل بين المستخدم الحالي والمستخدم الذي يدردش معه. لدي جدولين للرسائل: الدردشات التي تخزن معرفات المرسل والمستلم ، والرسائل التي تخزن محتويات الرسالة. يرجى الاطلاع على الصورة المرفقة لهياكل الجدول. لقد قمت بتضمين مقتطفات للأكواد لإظهار العلاقات بين نماذج المستخدمين والمحادثات والرسائل. هل يمكن لأي شخص مساعدتي في هذه المشكلة من فضلكم؟
Users Model
السؤال
محمد لارافيل
أنا أعمل على تطبيق دردشة باستخدام Laravel ، وأحتاج إلى مساعدة في فرز الرسائل بشكل صحيح. يعمل التطبيق دون ظهور اي مشكلة ولكنه يسترد جميع الرسائل التي أرسلها المستخدم الحالي إلى أي شخص ، بالإضافة إلى الرسائل المرسلة إلى المستخدم الحالي من قبل أي شخص. أريده فقط استرداد الرسائل بين المستخدم الحالي والمستخدم الذي يدردش معه. لدي جدولين للرسائل: الدردشات التي تخزن معرفات المرسل والمستلم ، والرسائل التي تخزن محتويات الرسالة. يرجى الاطلاع على الصورة المرفقة لهياكل الجدول. لقد قمت بتضمين مقتطفات للأكواد لإظهار العلاقات بين نماذج المستخدمين والمحادثات والرسائل. هل يمكن لأي شخص مساعدتي في هذه المشكلة من فضلكم؟
Users Model
public function chats() { return $this->hasMany(Chat::class, 'recipient_id') ->orWhere(function($query) { $query->where('sender_id', '<>', $this->id) ->where('recipient_id', $this->id); }) ->orWhere(function($query) { $query->where('sender_id', $this->id) ->where('recipient_id', '<>', $this->id); })->orderBy('created_at', 'asc'); }
Chats Model
public function users() { return $this->belongsTo(User::class); } public function messages() { return $this->hasMany(Message::class, 'chat_id'); }
Messages model
public function chats() { return $this->belongsTo(Chat::class, 'chat_id'); }
Messages Controller
public function getMessages($username) { $host = User::where('username', $username)->first(); $user = Auth::user(); if($username !== $user->username && !Abilities::isBlocked($username) && Abilities::canBlock($username)) { $messages = $host->chats() ->with(['messages' => function ($query) { $query->orderBy('created_at', 'desc'); }]) ->where('recipient_id', $user->id) ->get() ->each(function($chat) { $chat->status = $chat->sender_id === Auth::user()->id ? "sent" : "received"; }); return response()->json([ "messages" => $messages, ]); } return response()->json(["messages" => "Unauthorized access."]); }
Tables Structure
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.