Используя POST на моем внешнем интерфейсе (React. js, с react-beautiful-dnd
), я пытаюсь обновить позицию элементов, сохраненных пользователем.
Моя стратегия состоит в том, чтобы отправить через обновленный индекс идентификаторов, которые упорядочены в указанной позиции.
Мои данные (пример, упрощенный)
┌────┬────────┬───────┐
│ id │ title │ index │ <── my "position"
├────┼────────┼───────┤
│ 1 │ Apple │ 4 │
│ 2 │ Banana │ 1 │
│ 3 │ Mango │ 3 │
│ 4 │ Kiwi │ 2 │
│ 5 │ Orange │ 0 │
└────┴────────┴───────┘
Массив новых позиций (анатомия)
$value: sorted ids ------> [3, 2, 5, 1, 4]
: : : : :
$key: new index will be… 0, 1, 2, 3, 4
Код
Контроллер принимает массив, который получает новые позиции из ключей массива. Затем он перебирает коллекцию заданных идентификаторов и переназначает их обновленный индекс.
public function reorder(Request $request) {
$newIndex = $request->newIndex;
$items = Item::whereIn('id', $newIndex)->get();
foreach ($newIndex as $key => $value) {
// TODO: check if $item->index needs to be rewritten at all
$item = $items->find($value);
$item->index = $key;
$item->save();
}
return response('Success', 200);
}
dd()
из $request->input
array:1 [
"newIndex" => array:5 [
0 => 4
1 => 1
2 => 2
3 => 5
4 => 3
]
]
Проблема
Кажется ... код работает только один раз? Я что-то пропустил? POST срабатывает каждый раз, и массив set является точным, поэтому проблема не в внешней части.