首页 > php框架 > Laravel > 正文

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

穿越時空
发布: 2025-10-09 11:57:02
原创
210人浏览过
答案:Laravel软删除通过SoftDeletes trait和deleted_at字段实现,delete()方法仅标记删除,查询自动过滤已删除数据,withTrashed()和onlyTrashed()可查看删除记录,restore()恢复数据,forceDelete()永久删除。

laravel中的软删除(soft deletes)如何使用_laravel软删除使用方法

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

启用软删除功能

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

use Illuminate\Database\Eloquent\SoftDeletes;

在模型类中使用该 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();
});

然后运行迁移命令:

php artisan migrate

软删除的实际使用

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

人声去除
人声去除

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

人声去除 23
查看详情 人声去除
$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中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号