Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法

发布时间 - 2025-12-04 00:00:00    点击率:
Laravel软删除通过添加deleted_at字段和使用SoftDeletes trait实现,调用delete()时填充该字段而不真正删除数据,查询默认忽略已删除记录,可用withTrashed()或onlyTrashed()获取包含或仅含已删除数据,restore()方法可恢复数据,forceDelete()则永久删除记录。

Laravel 的 Eloquent ORM 提供了“软删除”功能,允许你标记数据为已删除,而不是真正从数据库中移除。这样可以在需要时恢复数据,同时保持数据完整性。实现软删除非常简单,只需几个步骤即可完成。

启用软删除功能

要在模型中启用软删除,需执行以下操作:

  • 在对应的数据表中添加 deleted_at 字段,通常使用 softDeletes() 方法创建迁移。
  • 在 Eloquent 模型中引入 Illuminate\Database\Eloquent\SoftDeletes trait。
示例:创建带有 softDeletes 的迁移
php artisan make:migration add_deleted_at_to_users_table --table=users

在迁移文件中:

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

然后运行迁移命令:

php artisan migrate

接着在模型中使用 SoftDeletes trait:

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

class User extends Model
{
    use SoftDeletes;
}

执行软删除操作

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

$user = User::find(1);
$user->delete(); // 此时 deleted_at 被填充,数据仍存在于数据库

查询时,Eloquent 会自动过滤掉已软删除的记录,即默认查询只返回未删除的数据。

查询软删除的数据

你可以通过特定方法访问已被软删除的数据:

  • withTrashed():获取包括已删除在内的所有记录。
  • onlyTrashed():仅获取已软删除的记录。
// 获取所有用户,包括已删除的
$users = User::withTrashed()->get();

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

恢复软删除的数据

使用 restore() 方法可以将软删除的数据恢复,即将 deleted_at 字段清空。

// 恢复单个已删除的用户
$user = User::withTrashed()->find(1);
$user->restore();

// 批量恢复
User::onlyTrashed()->where('active', 0)->restore();

注意:调用 restore() 后,deleted_at 值会被设为 null,该记录重新参与常规查询。

强制删除(永久删除)

如果希望彻底删除某条记录,绕过软删除机制,可使用 forceDelete() 方法。

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

对已软删除的记录再次调用 forceDelete() 也会将其永久删除。

基本上就这些。Laravel 软删除机制简洁实用,适合需要保留历史数据或支持数据回滚的场景。只要记得加字段、引入 trait,并合理使用查询作用域,就能轻松管理删除与恢复逻辑。


# laravel  # php  # ai  # 数据恢复  # 作用域  # NULL  # delete  # database  # 数据库  # 数据库中  # 移除  # 也会  # 你可以  # 就能  # 已被  # 只需  # 设为  # 将其  # 要在 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  中山网站制作网页,中山新生登记系统登记流程?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  JS中对数组元素进行增删改移的方法总结  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  Linux网络带宽限制_tc配置实践解析【教程】  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  Swift中switch语句区间和元组模式匹配  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  如何在万网开始建站?分步指南解析  Laravel如何实现API资源集合?(Resource Collection教程)  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  公司网站制作价格怎么算,公司办个官网需要多少钱?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Laravel如何使用Telescope进行调试?(安装和使用教程)  北京的网站制作公司有哪些,哪个视频网站最好?  网站建设要注意的标准 促进网站用户好感度!  香港服务器网站推广:SEO优化与外贸独立站搭建策略  详解vue.js组件化开发实践  jQuery中的100个技巧汇总  深圳网站制作培训,深圳哪些招聘网站比较好?  高端云建站费用究竟需要多少预算?  企业网站制作这些问题要关注  如何在云主机上快速搭建多站点网站?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  简单实现jsp分页  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Android Socket接口实现即时通讯实例代码  如何在云服务器上快速搭建个人网站?  高防服务器租用如何选择配置与防御等级?  Laravel如何配置和使用缓存?(Redis代码示例)  Laravel如何使用Vite进行前端资源打包?(配置示例)  香港服务器WordPress建站指南:SEO优化与高效部署策略  原生JS获取元素集合的子元素宽度实例  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  Laravel怎么调用外部API_Laravel Http Client客户端使用  制作企业网站建设方案,怎样建设一个公司网站?  Laravel如何为API编写文档_Laravel API文档生成与维护方法  如何在橙子建站中快速调整背景颜色?  如何在新浪SAE免费搭建个人博客?