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快速搭建高效网站?分步指南
网站制作企业,网站的banner和导航栏是指什么?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
怎么用AI帮你设计一套个性化的手机App图标?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
手机网站制作与建设方案,手机网站如何建设?
如何在Windows 2008云服务器安全搭建网站?
如何在香港免费服务器上快速搭建网站?
大连网站制作公司哪家好一点,大连买房网站哪个好?
Laravel Fortify是什么,和Jetstream有什么关系
如何在万网开始建站?分步指南解析
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
佛山企业网站制作公司有哪些,沟通100网上服务官网?
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
三星、SK海力士获美批准:可向中国出口芯片制造设备
JavaScript常见的五种数组去重的方式
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
网站建设整体流程解析,建站其实很容易!
Python进程池调度策略_任务分发说明【指导】
LinuxShell函数封装方法_脚本复用设计思路【教程】
微信小程序 HTTPS报错整理常见问题及解决方案
Laravel如何使用Livewire构建动态组件?(入门代码)
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
如何快速搭建高效可靠的建站解决方案?
如何在宝塔面板创建新站点?
如何基于云服务器快速搭建个人网站?
详解Oracle修改字段类型方法总结
C#如何调用原生C++ COM对象详解
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
网易LOFTER官网链接 老福特网页版登录地址
Android中AutoCompleteTextView自动提示
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
Android使用GridView实现日历的简单功能
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
如何快速搭建高效服务器建站系统?
香港服务器部署网站为何提示未备案?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
JS实现鼠标移上去显示图片或微信二维码


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