📜  laravel 迁移软删除 - PHP (1)

📅  最后修改于: 2023-12-03 15:32:36.619000             🧑  作者: Mango

Laravel迁移软删除

当一个记录被删除时,Soft Deletes 允许你保留这条记录的信息而不是从数据库中永久删除它。Laravel 的 Soft Deletes 功能使得可以轻松地在应用程序中实现这一点。

创建 Soft Deletes
创建迁移表

在Laravel中,首先需要创建一个新的迁移来添加软删除所需的必要列。运行以下 Artisan 命令将创建一个新迁移文件:

php artisan make:migration add_deleted_at_column_to_table_name --table=table_name

其中,table_name 是你需要添加soft deleted 的表的名称。 运行完以上命令,会在database/migrations目录下生成一个新的迁移文件。

定义列

up() 方法中添加一个 deleted_at 列:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddDeletedAtColumnToTableName extends Migration
{
    public function up()
    {
        Schema::table('table_name', function (Blueprint $table) {
            $table->softDeletes();
        });
    }

    public function down()
    {
        Schema::table('table_name', function (Blueprint $table) {
            $table->dropSoftDeletes();
        });
    }
}

运行 php artisan migrate 命令,使迁移生效。

使用 Soft Deletes

只需将 Illuminate\Database\Eloquent\SoftDeletes trait 添加到要使用 Soft Deletes 的模型中,并指定 deleted_at 字段:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model
{
    use SoftDeletes;

    protected $dates = ['deleted_at'];
}

现在,可以在 Larave 中软删除任何使用 SoftDeletes trait 的数据库表中的记录:

$user = User::find(1);

$user->delete();

软删除后,被删除的记录将在数据库中继续存在,但不会在后续查询结果中出现。

恢复已删除的记录

若需要恢复已被软删除的记录,只需要调用 restore() 方法:

$user = User::withTrashed()
            ->where('id', 1)
            ->restore();

在 Laravel 中, 迁移软删除是一项至关重要的任务,因为它允许我们实现更高级的数据库管理功能,例如保留所有删除数据的记录,而不是完全删除它们。