在拉拉维尔中重新排序项目



我有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++]);

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

最新更新