Ответы пользователя по тегу Vue.js
  • Почему отсортированная коллекция (Laravel) неверно отображает порядок в компоненте (Vue.js)?

    @oreym Автор вопроса
    Ну что ж... Как говорится, утро вечера мудренее... Совсем вылетело из головы, что при сортировке коллекций лары сохраняется связь ключ-значение. И если мы заканчиваем выражение методом sortBy(), то для php все хорошо, но так как наша коллекция улетает в объятия JS, то тут начинаются приколы.

    Вот вам развернутый json, который улетает в vue-компонент, и что с ним делает JS =)))

    Json string:

    "0":{
        "id":1,
        "attribute_group_id":1,
        "name":"\u0420\u0430\u0437\u043c\u0435\u0440 \u044d\u043a\u0440\u0430\u043d\u0430",
        "value_type":"text",
        "sorting_type":"alphanumeric",
        "position":1,
        "display_in_filter":1,
        "properties":[]
    },
    "2":{
        "id":4,
        "attribute_group_id":1,
        "name":"\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u044d\u043a\u0440\u0430\u043d\u0430",
        "value_type":"text",
        "sorting_type":"numeric",
        "position":2,
        "display_in_filter":1,
        "properties":[]
    },
    "1":{
        "id":3,
        "attribute_group_id":1,
        "name":"\u0426\u0432\u0435\u0442 \u043a\u043e\u0440\u043f\u0443\u0441\u0430",
        "value_type":"color",
        "sorting_type":"position",
        "position":3,
        "display_in_filter":1,
        "properties":[]
    }


    Обратите внимание на ключи объектов, 0, 2, 1

    И вот, что у нас на разборе в JS:

    "0":{
        "id":1,
        "attribute_group_id":1,
        "name":"Размер экрана",
        "value_type":"text",
        "sorting_type":"alphanumeric",
        "position":1,
        "display_in_filter":1,
        "properties":[]
    },
    "1":{
        "id":3,
        "attribute_group_id":1,
        "name":"Цвет корпуса",
        "value_type":"color",
        "sorting_type":"position",
        "position":3,
        "display_in_filter":1,
        "properties":{
        }
    },
    "2":{
        "id":4,
        "attribute_group_id":1,
        "name":"Расширение экрана",
        "value_type":"text",
        "sorting_type":"numeric",
        "position":2,
        "display_in_filter":1,
        "properties":{
      }
    }


    Вот так вот. Решение до банальности просто:

    $attributes = $attributeGroup->attributes->sortBy('position')->values()->all();


    Всем спасибо, что пытался помочь! Как говорится, надо переодически почитывать документашечку... Зоть быстрым взглядом...
    Ответ написан
    Комментировать