Как правилно да организираме сортирането на елементи, като същевременно запазваме позициите им в базата данни

Добър ден на всички. Не мога да реша проблема с организацията на сортирането на сайта. Или по-скоро с правилното му запазване на позициите на елементите. Използвам UI Sortable, в метода за актуализиране подавам нов индекс на елемента към скрипта чрез ajax и го запазвам за този елемент в базата данни. Проблемът е, че трябва да създадете и нови елементи, но какъв индекс трябва да им присвоите? Да кажем, че имаме елементи:

Елемент 1 (индекс 1) Елемент 2 (индекс 2) Елемент 3 (индекс 3) Елемент 4 (индекс 4)

Какъв индекс да присвоите на новия елемент? И какво да правим с елементи, които имат еднакви индекси? В крайна сметка можете да преместите един елемент на втора позиция, а другият също. Следователно и двете ще имат индекс 2 и какъв е правилният начин да ги сортирате? И ако зададете броя на всички елементи като индекс и добавите един, тогава по-късно такива елементи може да бъдат сортирани неправилно. Например, имаше 5 елемента, беше добавен нов с индекс 6. Два елемента бяха премахнати и беше добавен още един. Новият се добавя с индекс 5. Ще дойде преди последния, което е грешно.

Като цяло е интересно как бихте реализирали сортиране със запазване. Или как се прилага, ако вече е изпълнено? Необходимо е всички елементи да се съхраняват отделно с техните индекси. Съхраняването на масив отделно с индекси на елементи не е подходящо.

Добавих етикета Laravel, тъй като приложих собственото си решение върху него, и го публикувам: Изпращам списъка с елементи на бекенда по следния начин:

И елементите изглеждат така:

5,6,9 са идентификаторите на елементи в базата данни. В резултат на това ето какво идва в бекенда: [5,6,9] Съответно ключът на елемента е индекс Обработвам го по следния начин:

1) При използванеUISortable индексите няма да се повтарят, ако масив от елементи е сериализиран. Джаджата има инструмент за това. 2) Когато създавате нов елемент, първата стъпка е да проверите коректността на получените данни, след това да извадите максималния индекс от базата данни, като вземете предвид текущия клон, ако е дърво, след това го добавете към базата данни с този индекс + 1. Заявката ще изглежда така: