Как отсортировать коллекцию по нестандартному условию в laravel 5.7? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть готовый API, который возвращает следующий ответ json.

Ответ:

{
    "success": true,
    "conversation": [{
            "id": 37,
            "type": "1",
            "name": "Sonali",
            "created_at": "2019-02-18 13:26:10",
            "updated_at": "2019-02-18 20:32:54",
            "unread_count": 2,
            "chat": {
                "id": 357,
                "conversation_id": "23",
                "type": "text",
                "sender_id": "37",
                "receiver_id": "39",
                "data": "{\"text\":\"hello....\"}",
                "delivered_at": "2019-02-20 13:25:27",
                "seen_at": null,
                "created_at": "2019-02-20 13:25:10",
                "updated_at": "2019-02-20 13:25:27",
                "sender_name": "Sonali"
            }
        },
        {
            "id": 38,
            "type": "1",
            "name": "Raviraj",
            "created_at": "2019-02-18 20:23:55",
            "updated_at": "2019-02-18 20:32:47",
            "unread_count": 0,
            "chat": {
                "id": 354,
                "conversation_id": "22",
                "type": "text",
                "sender_id": "39",
                "receiver_id": "38",
                "data": "{\"text\":\"hey....\"}",
                "delivered_at": null,
                "seen_at": null,
                "created_at": "2019-02-20 13:24:35",
                "updated_at": "2019-02-20 13:24:35",
                "sender_name": "Nitesh Kesarkar"
            }
        },
        {
            "id": 27,
            "type": "1",
            "name": "Rakesh",
            "created_at": "2019-02-01 10:48:19",
            "updated_at": "2019-02-07 11:35:10",
            "unread_count": 1,
            "chat": {
                "id": 358,
                "conversation_id": "21",
                "type": "text",
                "sender_id": "27",
                "receiver_id": "39",
                "data": "{\"text\":\"hello\"}",
                "delivered_at": "2019-02-20 13:25:27",
                "seen_at": null,
                "created_at": "2019-02-20 13:25:24",
                "updated_at": "2019-02-20 13:25:27",
                "sender_name": "Rakesh Patil"
            }
        }
    ]
}

Этот ответ состоит из списка пользователей и связанного с ним последнего сообщения чата для текущего пользователя.Я хочу сначала отсортировать эту коллекцию по последнему сообщению.Как я могу это сделать?

Сортировка должна основываться на поле chat.created_at.

Ожидаемый результат:

{
    "success": true,
    "conversation": [
        {
            "id": 27,
            "type": "1",
            "name": "Rakesh",
            "created_at": "2019-02-01 10:48:19",
            "updated_at": "2019-02-07 11:35:10",
            "unread_count": 1,
            "chat": {
                "id": 358,
                "conversation_id": "21",
                "type": "text",
                "sender_id": "27",
                "receiver_id": "39",
                "data": "{\"text\":\"hello\"}",
                "delivered_at": "2019-02-20 13:25:27",
                "seen_at": null,
                "created_at": "2019-02-20 13:25:24",
                "updated_at": "2019-02-20 13:25:27",
                "sender_name": "Rakesh Patil"
            }
        },
        {
            "id": 37,
            "type": "1",
            "name": "Sonali",
            "created_at": "2019-02-18 13:26:10",
            "updated_at": "2019-02-18 20:32:54",
            "unread_count": 2,
            "chat": {
                "id": 357,
                "conversation_id": "23",
                "type": "text",
                "sender_id": "37",
                "receiver_id": "39",
                "data": "{\"text\":\"hello....\"}",
                "delivered_at": "2019-02-20 13:25:27",
                "seen_at": null,
                "created_at": "2019-02-20 13:25:10",
                "updated_at": "2019-02-20 13:25:27",
                "sender_name": "Sonali"
            }
        },
        {
            "id": 38,
            "type": "1",
            "name": "Raviraj",
            "created_at": "2019-02-18 20:23:55",
            "updated_at": "2019-02-18 20:32:47",
            "unread_count": 0,
            "chat": {
                "id": 354,
                "conversation_id": "22",
                "type": "text",
                "sender_id": "39",
                "receiver_id": "38",
                "data": "{\"text\":\"hey....\"}",
                "delivered_at": null,
                "seen_at": null,
                "created_at": "2019-02-20 13:24:35",
                "updated_at": "2019-02-20 13:24:35",
                "sender_name": "Nitesh Kesarkar"
            }
        }
    ]
}

ОБНОВЛЕНИЕ : добавлениеэти строки работали как положено.Спасибо @ JCode

        $sorted = $chats->sortByDesc('chat.created_at');
        $chats = $sorted->values()->all();

1 Ответ

0 голосов
/ 20 февраля 2019

Вы ищете sortBy() метод .

Это, конечно, сработает, если ваш вывод JSON можно превратить в коллекцию с помощью collect() - в идеальном сценарии,Ваши сообщения чата будут моделью в Laravel.

...