isTableReorderable()) { return; } $orderColumn = Str::afterLast($this->getTableReorderColumn(), '.'); if ( $this instanceof HasRelationshipTable && (($relationship = $this->getRelationship()) instanceof BelongsToMany) && in_array($orderColumn, $relationship->getPivotColumns()) ) { foreach ($order as $index => $recordKey) { $this->getTableRecord($recordKey)->{$relationship->getPivotAccessor()}->update([ $orderColumn => $index + 1, ]); } return; } $model = app($this->getTableModel()); $modelKeyName = $model->getKeyName(); $model ->newModelQuery() ->whereIn($modelKeyName, array_values($order)) ->update([ $orderColumn => DB::raw( 'case ' . collect($order) ->map(fn ($recordKey, int $recordIndex): string => 'when ' . $modelKeyName . ' = ' . DB::getPdo()->quote($recordKey) . ' then ' . ($recordIndex + 1)) ->implode(' ') . ' end' ), ]); } public function toggleTableReordering(): void { $this->isTableReordering = ! $this->isTableReordering; } public function isTableReordering(): bool { return $this->isTableReorderable() && $this->isTableReordering; } protected function isTablePaginationEnabledWhileReordering(): bool { return false; } protected function isTableReorderable(): bool { return filled($this->getTableReorderColumn()); } protected function getTableReorderColumn(): ?string { return null; } }