laravel - 更新给定 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 每次都会触发,并且设置的数组是准确的,因此问题不在前端。
解决方案
推荐阅读
- hyperledger-fabric - 更改 Hyperledger Fabric 中的默认 mod_policy
- java - ForkJoinPool:invokeall() 是否以错误的顺序加入?
- java - 是否可以在springboot中将name设置为变量,例如@Bean(name =“abc”)?我们可以动态传递 abc 的值吗?
- c# - Validator.TryValidateObject 在所有情况下始终返回 true
- vue.js - 多重深度观察:重复键
- node.js - Google OAuth2:错误:未设置访问、刷新令牌或 API 密钥
- python - os 模块破坏了 python,我没有运行的程序出现错误
- bash - 如果 psql 在执行 sql 脚本时抛出错误,则退出 shell 脚本
- neo4j - 在 Neo4j-Mac mojave 中获取数据库创建错误
- html - 提取的 URL 未重定向