/** * Moves the item to the new position, adjusting all queued element's positions * in between * * @param ReferQueue $item * @param $new_pos */ public function move(ReferQueue $item, $new_pos) { if ($item->position == $new_pos) { return; } $old_pos = $item->position; $item->position = -1; $item->save(); if ($new_pos < $old_pos) { ReferQueue::where('position', '>=', $new_pos)->where('position', '<', $old_pos)->orderBy('position', 'desc')->update(['position' => \DB::raw('`position` + 1')]); } else { ReferQueue::where('position', '<=', $new_pos)->where('position', '>', $old_pos)->orderBy('position', 'asc')->update(['position' => \DB::raw('`position` - 1')]); } $item->position = $new_pos; $item->save(); }