$category = Category::findOrFail($id);
$move = $desiredPosition > $currentPosition ? 'down' : 'up';
$current = $category->display_order;
$newPosition = $category->display_order + ($desiredPosition - $currentPosition);
$category->display_order = 0;
$category->save();
if ($move == 'down') {
Category::where('display_order', '>', $current)
->where('display_order', '<=', $newPosition)
->update(['display_order' => \DB::raw('display_order - 1')]);
} else if ($move == 'up') {
Category::where('display_order', '<', $current)
->where('display_order', '>=', $newPosition)
->update(['display_order' => \DB::raw('display_order + 1')]);
}
Category::where('display_order', 0)
->update(['display_order' => $newPosition]);
оно вып-ся после запроса с jquery sortable. Но тут не учитывается что если display_order идет не подряд, такое может случиться после удаления с БД. Можно ли как то его доработать или придется после удаления смещать?
если у тебя смещение на 1 позицию просто бери элемент с текущей позицией и элемент который перемещаем, и меняй их позиции. И лучше при удалении пересчитывать позиции
Обсуждают сегодня