首页 > 解决方案 > 如何将背包克隆功能用于独特的字段形式

问题描述

Backpack Crud 具有克隆功能。但是当我们的表具有唯一的字段列时,它就不起作用了。 背包克隆文档 当表有唯一列时如何克隆它?

public function clone($id)
    {
        $this->crud->hasAccessOrFail('clone');
        $this->crud->setOperation('clone');

        $clonedEntry = $this->crud->model->findOrFail($id)->replicate();

        return (string) $clonedEntry->push();
    }

标签: laravel-backpack

解决方案


最近我遇到了同样的问题。这是我的解决方案:

public function clone($id)
{
    $this->crud->hasAccessOrFail('clone');
    $this->crud->setOperation('clone');

    $clonedEntry = $this->crud->model->findOrFail($id)->replicate();

    // now resolve the value for unique attribute before save. e.g.
    $slug = Str::slug($clonedEntry->name, '-');
    $count = $this->crud->model->whereRaw("slug RLIKE '^{$slug}(-[0-9]+)?$'")->count();
    $clonedEntry->slug = $count ? "{$slug}-{$count}" : $slug;

    // when you are done, save changes
    return (string) $clonedEntry->push();
}

您没有指定有关该“唯一”属性的任何内容。随意根据您的需要自定义解析器。


推荐阅读