Laravel中的软删除(Soft Deletes)如何使用和恢复数据
发布时间 - 2025-11-16 00:00:00 点击率:次在 Laravel 中,软删除通过标记 deleted_at 字段实现数据可恢复性。需在迁移中添加 softDeletes() 字段并在模型中引入 SoftDeletes trait。调用 delete() 时设置 deleted_at 而非物理删除,默认查询不包含已删除记录。使用 withTrashed() 可查含已删数据,onlyTrashed() 仅查已删数据。通过 restore() 恢复数据,forceDelete() 则永久删除。适用于需保留历史或实现回收站功能的场景。
在 Laravel 中,软删除(Soft Deletes)是一种让数据“看似”被删除,但实际上保留在数据库中的机制。它通过标记一条记录为已删除,而不是真正从数据库中移除,从而实现数据的可恢复性。
启用软删除
要在模型中使用软删除,需要执行以下步骤:
- 在对应的数据库迁移文件中添加 deleted_at 字段
- 在模型类中引入 Illuminate\Database\Eloquent\Soft
Deletes trait
例如,为 users 表添加软删除支持:
1. 创建迁移:
Schema::table('users', function (Blueprint $table) {
$table->softDeletes();
});
运行迁移后,会在 users 表中添加一个 deleted_at 时间戳字段。
2. 在模型中使用 SoftDeletes:
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model
{
use SoftDeletes;
}
完成以上设置后,调用 $user->delete() 不会真正删除记录,而是将 deleted_at 设置为当前时间。
查询软删除的数据
默认情况下,Eloquent 查询不会返回已被软删除的记录。但你可以通过以下方式查看它们:
- withTrashed():包含已删除的记录
- onlyTrashed():只获取已删除的记录
示例:
// 获取所有用户,包括已删除的 $users = User::withTrashed()->get(); // 只获取已删除的用户 $trashedUsers = User::onlyTrashed()->get();
恢复软删除的数据
使用 restore() 方法可以将软删除的记录恢复,即将 deleted_at 字段清空。
示例:
// 恢复单个已删除用户
$user = User::onlyTrashed()->find(1);
$user->restore();
// 或链式调用
User::withTrashed()->where('id', 1)->restore();
你也可以在关联模型中恢复数据,只要该模型启用了软删除。
强制删除(彻底删除)
如果确实需要永久删除某条记录,可以使用 forceDelete() 方法:
$user->forceDelete();
这个操作不可逆,数据将从数据库中彻底移除。
基本上就这些。软删除适合需要保留历史数据或支持“回收站”功能的场景,合理使用能提升系统的安全性和用户体验。注意在做数据恢复时,确保业务逻辑正确处理状态变化。不复杂但容易忽略细节。
# laravel
# ai
# 数据恢复
# delete
# database
# 数据库
# 数据库中
# 链式
# 移除
# 恢复性
# 是一种
# 已被
# 适用于
# 会在
# 并在
# 要在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
长沙做网站要多少钱,长沙国安网络怎么样?
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
Laravel如何与Pusher实现实时通信?(WebSocket示例)
如何在腾讯云免费申请建站?
详解MySQL数据库的安装与密码配置
开心动漫网站制作软件下载,十分开心动画为何停播?
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
如何用搬瓦工VPS快速搭建个人网站?
如何在阿里云通过域名搭建网站?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
Laravel API资源类怎么用_Laravel API Resource数据转换
Laravel distinct去重查询_Laravel Eloquent去重方法
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
简单实现Android验证码
北京网站制作的公司有哪些,北京白云观官方网站?
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何快速搭建个人网站并优化SEO?
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
javascript读取文本节点方法小结
如何在建站之星网店版论坛获取技术支持?
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
js实现点击每个li节点,都弹出其文本值及修改
Laravel如何创建自定义中间件?(Middleware代码示例)
Laravel怎么在Blade中安全地输出原始HTML内容
想要更高端的建设网站,这些原则一定要坚持!
Laravel如何使用模型观察者?(Observer代码示例)
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
微信小程序 require机制详解及实例代码
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
图册素材网站设计制作软件,图册的导出方式有几种?
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
企业网站制作这些问题要关注
深圳网站制作平台,深圳市做网站好的公司有哪些?
Laravel storage目录权限问题_Laravel文件写入权限设置
如何用狗爹虚拟主机快速搭建网站?
Thinkphp 中 distinct 的用法解析
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
微信小程序 scroll-view组件实现列表页实例代码
javascript基于原型链的继承及call和apply函数用法分析
大型企业网站制作流程,做网站需要注册公司吗?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
移动端脚本框架Hammer.js
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
bing浏览器学术搜索入口_bing学术文献检索地址
下一篇:js继承实现方法详解
下一篇:js继承实现方法详解


Deletes trait