Anonymous
Добавление пагинации во вложенный массив Laravel 10
Сообщение
Anonymous » 16 мар 2024, 18:52
Итак, я создаю приложение для чата 1-1, используя laravel для интерфейса Api и response.js
Эта функция находит все сообщения, используя идентификатор получателя и идентификатор пользователя для аутентификации
и затем группирует сообщения (данные) по дням
& затем он переворачивает массив, потому что во внешнем интерфейсе мне нужно отображать сообщения снизу вверх
Мой код < /p>
Код: Выделить всё
public function getMessages(Request $request)
{
$validatedData = Validator::make($request->all(), [
"receiver_id" => "required",
]);
if ($validatedData->fails()) {
return $this->sendresponse('false', 'validation error', $validatedData->errors());
}
$user_id = Auth::user()->id;
$receiver_user = AppUser::where('id', $request->receiver_id)->selectbasic()->withCount('followers')->first();
$receiver_id = $request->receiver_id;
$messages = Message::where(function ($query) use ($user_id, $receiver_id) {
$query->where('sender_id', $user_id)
->where('receiver_id', $receiver_id);
})->orWhere(function ($query) use ($user_id, $receiver_id) {
$query->where('sender_id', $receiver_id)
->where('receiver_id', $user_id);
})->orderBy('created_at', 'asc')->get();
// Group messages by day names and reverse the messages within each group
$groupedMessages = $messages->groupBy(function ($message) {
return $message->created_at->format('l'); // 'l' format returns the full day name
})->map(function ($messagesByDay) use ($user_id) {
return $messagesByDay->reverse()->values()->map(function ($message) use ($user_id) {
$message->sent = $message->sender_id == $user_id ? 1 : 0;
$message->received = $message->receiver_id == $user_id ? 1 : 0;
return $message;
});
});
// Reverse the order of day groups
$groupedMessages = $groupedMessages->reverse();
return $this->sendresponse('true', 'found', ['messages' => $groupedMessages, 'receiver' => $receiver_user]);
}
Текущий ответ API
Код: Выделить всё
{
"type": "true",
"message": "found",
"data": {
"messages": {
"Friday": [
{
"id": 39,
"sender_id": 1,
"receiver_id": 2,
"content": "helo new msg",
"created_at": "2024-03-15T06:49:57.000000Z",
"updated_at": "2024-03-15T06:49:57.000000Z",
"sent": 0,
"received": 1,
"time": "06:49 AM"
},
{
"id": 38,
"sender_id": 2,
"receiver_id": 1,
"content": "helo new msg",
"created_at": "2024-03-15T06:49:35.000000Z",
"updated_at": "2024-03-15T06:49:35.000000Z",
"sent": 1,
"received": 0,
"time": "06:49 AM"
}
],
"Wednesday": [
{
"id": 37,
"sender_id": 2,
"receiver_id": 1,
"content": "helo new msg",
"created_at": "2024-03-13T14:54:47.000000Z",
"updated_at": "2024-03-13T14:54:47.000000Z",
"sent": 1,
"received": 0,
"time": "02:54 PM"
},
...
{
"id": 14,
"sender_id": 2,
"receiver_id": 1,
"content": "helo new msg",
"created_at": "2024-03-13T10:28:23.000000Z",
"updated_at": "2024-03-13T10:28:23.000000Z",
"sent": 1,
"received": 0,
"time": "10:28 AM"
}
],
"Sunday": [
{
"id": 13,
"sender_id": 2,
"receiver_id": 1,
"content": "heiik",
"created_at": "2024-03-10T13:17:58.000000Z",
"updated_at": "2024-03-10T13:17:58.000000Z",
"sent": 1,
"received": 0,
"time": "01:17 PM"
},
...
{
"id": 1,
"sender_id": 2,
"receiver_id": 1,
"content": "hello",
"created_at": "2024-03-10T07:27:10.000000Z",
"updated_at": "2024-03-10T07:27:10.000000Z",
"sent": 1,
"received": 0,
"time": "07:27 AM"
}
]
},
"receiver": {
"name": "XYZ",
"profile": "xyz.png",
"id": 1,
"about": null,
"user_name": "user",
"created_at": "March 2024",
"followers_count": 0
}
}
}
Я пробовал использовать ChatGpt, но мне не помогло
Подробнее здесь:
https://stackoverflow.com/questions/781 ... laravel-10
1710604322
Anonymous
Итак, я создаю приложение для чата 1-1, используя laravel для интерфейса Api и response.js Эта функция находит все сообщения, используя идентификатор получателя и идентификатор пользователя для аутентификации и затем группирует сообщения (данные) по дням & затем он переворачивает массив, потому что во внешнем интерфейсе мне нужно отображать сообщения снизу вверх [b]Мой код[/b]< /p> [code] public function getMessages(Request $request) { $validatedData = Validator::make($request->all(), [ "receiver_id" => "required", ]); if ($validatedData->fails()) { return $this->sendresponse('false', 'validation error', $validatedData->errors()); } $user_id = Auth::user()->id; $receiver_user = AppUser::where('id', $request->receiver_id)->selectbasic()->withCount('followers')->first(); $receiver_id = $request->receiver_id; $messages = Message::where(function ($query) use ($user_id, $receiver_id) { $query->where('sender_id', $user_id) ->where('receiver_id', $receiver_id); })->orWhere(function ($query) use ($user_id, $receiver_id) { $query->where('sender_id', $receiver_id) ->where('receiver_id', $user_id); })->orderBy('created_at', 'asc')->get(); // Group messages by day names and reverse the messages within each group $groupedMessages = $messages->groupBy(function ($message) { return $message->created_at->format('l'); // 'l' format returns the full day name })->map(function ($messagesByDay) use ($user_id) { return $messagesByDay->reverse()->values()->map(function ($message) use ($user_id) { $message->sent = $message->sender_id == $user_id ? 1 : 0; $message->received = $message->receiver_id == $user_id ? 1 : 0; return $message; }); }); // Reverse the order of day groups $groupedMessages = $groupedMessages->reverse(); return $this->sendresponse('true', 'found', ['messages' => $groupedMessages, 'receiver' => $receiver_user]); } [/code] [b]Текущий ответ API[/b] [code]{ "type": "true", "message": "found", "data": { "messages": { "Friday": [ { "id": 39, "sender_id": 1, "receiver_id": 2, "content": "helo new msg", "created_at": "2024-03-15T06:49:57.000000Z", "updated_at": "2024-03-15T06:49:57.000000Z", "sent": 0, "received": 1, "time": "06:49 AM" }, { "id": 38, "sender_id": 2, "receiver_id": 1, "content": "helo new msg", "created_at": "2024-03-15T06:49:35.000000Z", "updated_at": "2024-03-15T06:49:35.000000Z", "sent": 1, "received": 0, "time": "06:49 AM" } ], "Wednesday": [ { "id": 37, "sender_id": 2, "receiver_id": 1, "content": "helo new msg", "created_at": "2024-03-13T14:54:47.000000Z", "updated_at": "2024-03-13T14:54:47.000000Z", "sent": 1, "received": 0, "time": "02:54 PM" }, ... { "id": 14, "sender_id": 2, "receiver_id": 1, "content": "helo new msg", "created_at": "2024-03-13T10:28:23.000000Z", "updated_at": "2024-03-13T10:28:23.000000Z", "sent": 1, "received": 0, "time": "10:28 AM" } ], "Sunday": [ { "id": 13, "sender_id": 2, "receiver_id": 1, "content": "heiik", "created_at": "2024-03-10T13:17:58.000000Z", "updated_at": "2024-03-10T13:17:58.000000Z", "sent": 1, "received": 0, "time": "01:17 PM" }, ... { "id": 1, "sender_id": 2, "receiver_id": 1, "content": "hello", "created_at": "2024-03-10T07:27:10.000000Z", "updated_at": "2024-03-10T07:27:10.000000Z", "sent": 1, "received": 0, "time": "07:27 AM" } ] }, "receiver": { "name": "XYZ", "profile": "xyz.png", "id": 1, "about": null, "user_name": "user", "created_at": "March 2024", "followers_count": 0 } } } [/code] Я пробовал использовать ChatGpt, но мне не помогло Подробнее здесь: [url]https://stackoverflow.com/questions/78172395/adding-pagination-to-nested-array-laravel-10[/url]