php - 在 Laravel 中重新排序项目
问题描述
我有projects
表格,每个项目都有order
一个整数字段。
我基本上使用这个字段在数据库中手动重新排序项目。在前端,我正在使用sortable.js
库,经过简单的拖放操作,我反序列化了一个项目数组,它给了我一个新排序的id
s 数组。
每次删除后,它都会调用 Backend 并传递此数组。然后在后端我正在做一些事情
$order = 1;
foreach($ids as $id) {
Project::find($id)->update(['order' => $order++]);
}
目前它运行良好,但projects
列表很快就会达到 600 多个(目前只有 30 个左右),我担心随着项目列表的增长它会成为一个问题。我想知道有什么可以替代的解决方案?
而且因为事件被触发onDrop
,一些用户可能会喜欢移动东西然后放回去(放下物品时有一个很好的动画),他们基本上会触发很多不必要的重新订购。
它必须是onDrop
,就像目前设置表格的方式一样。
我是否应该尝试计算在 FE 上移动了哪些项目?任何替代方案,有人吗?
解决方案
您的代码在更新它们之前不必要地获取所有项目。用这个:
Project::whereKey($id)->update(['order' => $order++]);
如果不是太复杂,只更新移动的项目听起来是一个不错的选择。
推荐阅读
- google-cloud-dataflow - Apache Beam:刷新我正在使用 MongoDbIO.read() 从 MongoDB 读取的侧输入
- apache-flink - Flink Collector.collect(T) 耗时超过 150 秒
- python - 如何替换多索引的某些值?
- angular - PrimeNG - 在时间选择器组件中设置值
- c# - 如何阻止docfx在c#xml注释中将“\\”转义为“\”?
- pyqt - 从 pyqt5 文件到另一个 .py 文件的变量
- php - Laravel 忽略验证错误并使表单消失
- python - 如何摆脱\n?
- html - 如何只允许使用纯 HTML 的文本框上的字母数字
- javascript - Discord.js - Erela.js - Lavalink | 检查 Lavalink 是否没有返回结果