Дата публикации: 08.03.2025 в 16:36

Клонирование записей в MoonShine v3+

Анатолий ШевелевАнатолий Шевелев
0 комментария

Реализуем функционал клонирования записей в ресурсе асинхронно через `ActionButton` .

После клонирования записи можно пойти 2мя путями, либо выполнить редирект на редактирование созданной записи, либо вызвать событие релоада таблицы, чтобы увидеть новую запись без перезагрузки страницы. В данном примере я пошёл первым путём :)

Внимание! Если у модели есть уникальный ключ кроме первичного ключа, то при попытке клонирования (репликации) будет ошибка на уровне SQL.

protected function indexButtons(): ListOf
{
    return parent::indexButtons()
        ->add(
            ActionButton::make('Clone')
                ->icon('document-duplicate')
                ->method('duplicateRow')
                ->withConfirm()
        );
}

public static function duplicateRow(MoonShineRequest $request)
{
    $resource = $request->getResource();

    /** @var Model $newItem */
    $newItem = $resource?->getItem()->replicate();

    $newItem->save();

    $url = $resource?->getFormPageUrl($newItem->id);

    return MoonShineJsonResponse::make()->redirect($url);
}
ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай