Дата публикации: 15.11.2025 в 11:24

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

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

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

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

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

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

#[AsyncMethod]
public static function duplicateRow(CrudRequestContract $request, JsonResponse $response)
{
    $resource = $request->getResource();

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

    $newItem->save();

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

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