Ну что ж... Как говорится, утро вечера мудренее... Совсем вылетело из головы, что при сортировке коллекций лары сохраняется связь ключ-значение. И если мы заканчиваем выражение методом 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();
Всем спасибо, что пытался помочь! Как говорится, надо переодически почитывать документашечку... Зоть быстрым взглядом...