builder()->where("chat_id", $chat_id)->orderBy("created_at", "asc")->get()->getResultObject(); foreach ($messages as $message) { $message->pos = auth()->user()->id == $message->sender_id ? "right" : "left"; if (auth()->user()->id == $message->sender_id) { $message->user = auth()->user(); } else { $message->user = $user->find($message->sender_id); } } return $messages; } public function get_chat_contact_messages(int $receiver_id): array { $conversationArray = []; $userModel = model(UserModel::class); $receiverUser = $userModel->find($receiver_id); $messagesFromClient = $this->builder() ->where("sender_id", auth()->user()->id) ->where("receiver_id", $receiverUser->id) ->get()->getResultObject(); $messagesFromReceiver = $this->builder() ->where("sender_id", $receiver_id) ->where("receiver_id", auth()->user()->id) ->get()->getResultObject(); foreach ($messagesFromClient as $message) { $message->pos = "right"; $message->user = auth()->user(); $conversationArray[] = $message; } foreach ($messagesFromReceiver as $message) { $message->pos = "left"; $message->user = $receiverUser; $conversationArray[] = $message; } $dates = array(); foreach ($conversationArray as $key => $row) { $dates[$key] = strtotime($row->created_at); } array_multisort($dates, SORT_ASC, $conversationArray); return $conversationArray; } public function get_chat_unread_messages_count(int $sender_id): int { $messagesFromReceiver = $this->builder() ->where("sender_id", $sender_id) ->where("viewed", false) ->where("receiver_id", auth()->user()->id)->countAllResults(); return $messagesFromReceiver; } public function set_chat_messages_as_read(int $sender_id): int { $messagesFromReceiver = $this->builder() ->set("viewed", true) ->where("sender_id", $sender_id) ->where("receiver_id", auth()->user()->id)->update(); return $messagesFromReceiver; } }