首页 > 解决方案 > 在 Laravel 中重新排序项目

问题描述

我有projects表格,每个项目都有order一个整数字段。

我基本上使用这个字段在数据库中手动重新排序项目。在前端,我正在使用sortable.js库,经过简单的拖放操作,我反序列化了一个项目数组,它给了我一个新排序的ids 数组。

每次删除后,它都会调用 Backend 并传递此数组。然后在后端我正在做一些事情

$order = 1;
foreach($ids as $id) {
  Project::find($id)->update(['order' => $order++]);
}

目前它运行良好,但projects列表很快就会达到 600 多个(目前只有 30 个左右),我担心随着项目列表的增长它会成为一个问题。我想知道有什么可以替代的解决方案?

而且因为事件被触发onDrop,一些用户可能会喜欢移动东西然后放回去(放下物品时有一个很好的动画),他们基本上会触发很多不必要的重新订购。

它必须是onDrop,就像目前设置表格的方式一样。

我是否应该尝试计算在 FE 上移动了哪些项目?任何替代方案,有人吗?

标签: phpsqllaravellaravel-5

解决方案


您的代码在更新它们之前不必要地获取所有项目。用这个:

Project::whereKey($id)->update(['order' => $order++]);

如果不是太复杂,只更新移动的项目听起来是一个不错的选择。


推荐阅读