$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 позицию просто бери элемент с текущей позицией и элемент который перемещаем, и меняй их позиции. И лучше при удалении пересчитывать позиции
Обсуждают сегодня