Сортировка записей
Сортировка позволяет менять порядок записей вручную с помощью перетаскивания. В таблице ресурса появляется кнопка переключения в режим сортировки, где все записи загружаются без пагинации и отображаются в виде списка с drag-handle.

Подключение
Добавьте трейт Reorderable к ресурсу:
use Frame\Laravel\Concerns\Reorderable;
class PageResource extends Resource
{
use Reorderable;
public static string $model = Page::class;
}
Модель должна иметь колонку для хранения порядка. По умолчанию — sort_order:
php artisan make:migration add_sort_order_to_pages_table
Schema::table('pages', function (Blueprint $table) {
$table->integer('sort_order')->default(0);
});
sort_order вместо id.Настройка
sort_order.500. Установите null для снятия ограничения.class PageResource extends Resource
{
use Reorderable;
public static string $sortColumn = 'position';
public static ?int $reorderLimit = 1000;
}
Облегчённый формат
По умолчанию в режиме сортировки отображаются те же поля, что и в таблице, с полноценным рендерингом ячеек (relation-поля, select и т.д.).
Если нужен упрощённый вид — добавьте свойство $useSortableRecord и переопределите метод toSortableRecord():
class PageResource extends Resource
{
use Reorderable;
public static bool $useSortableRecord = true;
public function toSortableRecord(Model $model): array
{
return [
'id' => $model->getKey(),
'title' => $model->title,
'subtitle' => $model->slug,
];
}
}
В этом случае записи отображаются как компактный список: ID, заголовок и подзаголовок.
Конкурентность
При сохранении порядка используется механизм «traffic cop»: если другой пользователь изменил порядок после загрузки списка, сервер вернёт ошибку 409 Conflict с предложением обновить страницу. Это предотвращает случайную перезапись чужих изменений.
Настройка через Options
Сортировку можно отключить через setUp(), даже если трейт подключён:
protected function setUp(Options $options): void
{
$options->reordering->enabled(false);
}