首页 > 解决方案 > 更新给定 ID 集合中的 `index` 属性

问题描述

在我的前端(React.js,带有react-beautiful-dnd)上使用 POST,我试图更新用户存储的项目的位置。

我的策略是发送在指定位置排序的更新的 ID 索引。

我的数据(示例,简化)

┌────┬────────┬───────┐
│ 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

编码

控制器摄取一个数组,该数组从数组的键中派生出新的位置。然后循环遍历给定 ID 的集合,并为它们重新分配更新后的索引。

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 每次都会触发,并且设置的数组是准确的,因此问题不在前端。

标签: laraveleloquentposition

解决方案


推荐阅读