Laravel软删除如何实现_Laravel SoftDeletes使用详解

admin 百科 10
Laravel的软删除通过SoftDeletes trait实现,模型引入该trait并添加deleted_at字段即可标记删除而不移除记录,便于数据恢复与完整性维护。

Laravel软删除如何实现_Laravel SoftDeletes使用详解-第1张图片-佛山资讯网

Laravel 的软删除(Soft Deletes)是一种优雅的方式,用来标记数据为“已删除”,而不会真正从数据库中移除记录。这样可以在需要时恢复数据,同时保持数据完整性。Laravel 通过 SoftDeletes trait 提供了开箱即用的支持,使用起来非常简单。

启用软删除功能

要在模型中启用软删除,只需在对应的 Eloquent 模型中引入 Illuminate\Database\Eloquent\SoftDeletes trait,并确保数据表包含一个 deleted_at 字段。

示例:启用软删除的 User 模型

<?php

namespace App\Models;

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

class User extends Model
{
    use SoftDeletes;

    protected $dates = ['deleted_at']; // 可选:如果使用 $dates,可直接操作 Carbon 实例
}

登录后复制

注意: Laravel 6+ 中,$dates 属性不再是必须的,Eloquent 会自动识别 deleted_at 为日期类型。

数据库迁移中添加 deleted_at 字段

要支持软删除,数据表必须包含一个 nullable 的 deleted_at 字段。可以使用迁移文件中的 softDeletes() 方法来添加它。

示例:创建用户表并添加软删除字段

<?php

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

class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('deleted_at')->nullable(); // 手动写法
            // 或者使用下面这行:
            // $table->softDeletes();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('users');
    }
}

登录后复制

提示: 使用 $table->softDeletes(); 是更简洁的方式,它会自动生成一个 nullable 的 timestamp 类型的 deleted_at 字段。

执行软删除与恢复

一旦模型启用了软删除,调用 delete() 方法不会真正删除记录,而是将 deleted_at 设置为当前时间。

示例:执行软删除

$user = User::find(1);
$user->delete(); // 此时 deleted_at 被设置,数据仍在数据库中

登录后复制

要恢复已被软删除的记录,可以调用 restore() 方法。

标签: laravel ai 数据恢复

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~