如何在 laravel 8 中启用恢复软删除项目

How to enable restore a softdeleted item on in laravel 8

我已经使用 softdelete 选项创建了一个 CRUD 模块,但现在我需要将 restore 选项添加到列表 table

我在管理端使用 backpackforlaravellaravel 8。

来自 backpackforlaravel 文档: https://backpackforlaravel.com/docs 我激活了 软删除:

<?php

namespace App\Http\Controllers\Admin;

use Backpack\CRUD\app\Http\Controllers\CrudController;

class ProductCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
}

我发现这个过滤器可以显示列表中已删除的 项:

$this->crud->addFilter([
  'type'  => 'simple',
  'name'  => 'trashed',
  'label' => 'Trashed'
],
false,
function($values) { // if the filter is active
    $this->crud->query = $this->crud->query->onlyTrashed();
});

现在,如何恢复物品?

已解决,

如果您正在使用 backpackforlaravel,请应用后续步骤来添加 恢复软删除的项目

第一步:在Model上添加这个函数:

此函数将 return 按钮。

    public function restoreActionButton()
    {
        return '<a href="' . url("/admin/product/restore/{$this->id}") . '" class="btn btn-sm btn-link" data-button-type="delete"><i class="la la-trash-restore"></i> Restore </a>';
    }

第二步:将route添加到控制器函数中:

此路线必须与模型中 return 匹配。

    Route::get(
        '/admin/product/restore/{id}',
        [App\Http\Controllers\Admin\ProductCrudController::class, 'restore']
    );

第三步:现在恢复功能,把它添加到controller.

    public function restore($id)
    {
        Product::withTrashed()->find($id)->restore();
        return redirect()->back();
    }

高于 class

use App\Models\Product;

步骤 4:(可选)在同一 controller 上更新过滤器:

这将在用户应用已删除的过滤器时隐藏所有按钮。

       $this->crud->addFilter(
            [
                'type'  => 'simple',
                'name'  => 'trashed',
                'label' => 'Trashed'
            ],
            false,
            function ($values) { // if the filter is active
                // $this->crud->addClause('trashed');
                $this->crud->query = $this->crud->query->onlyTrashed();
                $this->crud->removeAllButtonsFromStack('line');
                $this->crud->addButtonFromModelFunction('line', 'restore', 'restoreActionButton');
            }
        );