how to use backpack clone feature for unique field form

Viewed 318

Backpack Crud have clone function. But it isn't work when our table has unique field column. Backpack clone Documentation When table has unique column how to clone it?

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

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

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

Recently I experienced the same problem. Here is my solution:

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();
}

You didn't specify anything about that "unique" attribute. Feel free to customize the resolver according your needs.

Related