我有projects
表,每个项目都有order
一个整数字段。
我使用此字段基本上在数据库中手动对项目进行重新排序。在前端,我正在使用sortable.js
库,经过简单的拖放后,我反序列化了一系列项目,它给了我一个新排序的id
数组。
每次丢弃后,它都会调用后端并传递此数组。然后在后端,我正在做一些类似的事情
$order = 1;
foreach($ids as $id) {
Project::find($id)->update(['order' => $order++]);
}
它目前工作正常,但projects
列表很快就会达到 600+ 左右(目前只有 30 左右(,我担心随着项目列表的增长,它会成为一个问题。我想知道有什么替代解决方案可以解决这个问题?
而且由于该事件是onDrop
触发的,一些用户可能会觉得移动东西然后将它们放回去很愉快(掉落物品时有一个很好的动画(,他们基本上会触发很多不必要的重新订购。
它必须是onDrop
的,就像目前设置表单的方式一样。
我应该尝试计算哪些项目在 FE 上移动了吗?还有其他选择吗?
您的代码在更新项目之前不必要地获取所有项目。使用这个:
Project::whereKey($id)->update(['order' => $order++]);
如果不是太复杂,那么仅更新移动的项目听起来是一个不错的选择。