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。
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免费搭建个人博客?


hTrashed()->find(1);
$user->restore();
// 批量恢复
User::onlyTrashed()->where('active', 0)->restore();