laravel中的软删除(Soft Deletes)如何使用_Laravel软删除使用方法

答案:laravel软删除通过Softdeletes trait和deleted_at字段实现,delete()方法仅标记删除,查询自动过滤已删除数据,withTrashed()和onlyTrashed()可查看删除记录,restore()恢复数据,forceDelete()永久删除。

laravel中的软删除(Soft Deletes)如何使用_Laravel软删除使用方法

在 Laravel 中,软删除(Soft Deletes)是一种让数据“看似”被删除,实则保留在数据库中的机制。通过软删除,你可以避免永久丢失数据,同时支持后续恢复操作。实现软删除非常简单,只需几个步骤即可完成。

启用软删除功能

要在模型中使用软删除,需引入 SoftDeletes trait,并添加一个用于记录删除时间的字段。

use IlluminatedatabaseEloquentSoftDeletes;

在模型类中使用该 trait:

app/Models/User.php

class User extends Model
{
    use SoftDeletes;
}

数据库迁移中添加 deleted_at 字段

Laravel 软删除依赖于一个 deleted_at 字段来标记删除时间。这个字段默认为 NULL,当调用 delete() 方法时,Laravel 会自动将其设置为当前时间戳。

创建或修改迁移文件时,使用 softDeletes() 方法:

Schema::table('users', function (Blueprint $table) {
    $table->softDeletes();
});

然后运行迁移命令:

laravel中的软删除(Soft Deletes)如何使用_Laravel软删除使用方法

人声去除

用强大的AI算法将声音从音乐中分离出来

laravel中的软删除(Soft Deletes)如何使用_Laravel软删除使用方法23

查看详情 laravel中的软删除(Soft Deletes)如何使用_Laravel软删除使用方法

php artisan migrate

软删除的实际使用

启用后,调用模型的 delete() 方法不会真正从数据库中移除记录,而是更新 deleted_at 字段。

$user = User::find(1);
$user->delete(); // 此时 deleted_at 被设为当前时间

查询时,Laravel 会自动过滤掉已软删除的记录,也就是说以下代码查不到已被软删除的用户:

User::all(); // 不包含 deleted_at 非空的记录

查询软删除的数据

如果需要查看已被软删除的记录,可以使用以下方法:

  • withTrashed():包含正常和已删除的记录
  • onlyTrashed():仅查询已软删除的记录

// 获取所有用户,包括软删除的
User::withTrashed()->get();

// 只获取已软删除的用户
User::onlyTrashed()->get();

恢复软删除的数据

使用 restore() 方法可将软删除的记录恢复:

User::withTrashed()->find(1)->restore();

// 或链式调用
User::onlyTrashed()->where('id', 1)->restore();

执行后,deleted_at 字段会被重置为 NULL,记录重新生效。

强制永久删除

若希望彻底删除某条记录,绕过软删除机制,可使用 forceDelete()

$user = User::find(1);
$user->forceDelete(); // 永久从数据库中删除

基本上就这些。软删除是 Laravel 提供的一个实用功能,特别适用于需要保留历史数据或支持回收站功能的系统。只要记得加 trait、加字段,其余查询和操作都由框架自动处理,使用起来非常方便。不复杂但容易忽略细节,比如迁移没跑或者忘了 use SoftDeletes,会导致功能失效。

以上就是laravel中的软删除(Soft Deletes)如何使用_Laravel软删除使用方法的详细内容,更多请关注php中文网其它相关文章!

    当前页面评论已关闭。

    text=ZqhQzanResources