重新排序集合在Laravel



我正在做一个Laravel项目,人们可以在页面上发布贴片,然后单击按钮在页面上向上或向下移动它们。目前我有一个表设置瓷砖如下:

$table->string('tile_name');
$table->text('tile_rules');
$table->integer('tile_order');

然后在前端,我有一个按钮,可以根据你按下的箭头向上或向下移动tile。对于我的up函数,我认为我可以从Tile和Add中获取当前的顺序,这以最简单的形式工作,但我的问题是,循环回看和更新页面上所有其他Tile的最佳方法是什么?我认为,公平地说,一个页面上需要重新排序的瓷砖永远不会超过10个。

我认为这必须能够与foreach循环:

$currentOrder = $currentTile->tile_order;
foreach($Tiles as $tile) {
Tiles::whereKey($tile->id)->update(['tile_order' => ++$order]);
}

但是我缺少的是我如何告诉它从一个特定的瓷砖开始,只更新上面或下面的瓷砖取决于我是向上移动还是向下移动?

如果有人能给我指出正确的方向,我将不胜感激!

我考虑过在前端处理,是否允许用户在完成订单后保存订单,但我创建了一个Up和Down函数,该函数将找到它上面或下面的项目,并与之切换订单整数。这似乎比循环遍历所有内容并更新计数要好。

if ($tileAbove == 0) {
session()->flash('message', 'This Tile can not be moved any higher');
} else {
//Update the current Tile to the new order and tileAbove to the old order
$tileAboveObj = $positionTiles->filter(function($item) use ($tileAbove) {
return $item->tile_order == $tileAbove;
})->first();
Tiles::whereKey($currentTile->id)->update(['tile_order' => $tileAbove]);
Tiles::whereKey($tileAboveObj->id)->update(['tile_order' => $currentTileOrder]);
}

$tileAbove就是当前的贴图顺序减去1。

最新更新