新闻中心
Lar*el软删除如何实现_Lar*el SoftDeletes使用详解
Lar*el的软删除通过SoftDeletes trait实现,模型引入该trait并添加deleted_at字段即可标记删除而不移除记录,便于数据恢复与完整性维护。

Lar*el 的软删除(Soft Deletes)是一种优雅的方式,用来标记数据为“已删除”,而不会真正从数据库中移除记录。这样可以在需要时恢复数据,同时保持数据完整性。Lar*el 通过 SoftDeletes trait 提供了开箱即用的支持,使用起来非常简单。
启用软删除功能
要在模型中启用软删除,只需在对应的 Eloquent 模型中引入 Illuminate\Database\Eloquent\SoftDeletes trait,并确保数据表包含一个 deleted_at 字段。
示例:启用软删除的 User 模型
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class User extends Model { use SoftDeletes; protected $dates = ['deleted_at']; // 可选:如果使用 $dates,可直接操作 Carbon 实例 }
注意: Lar*el 6+ 中,$dates 属性不再是必须的,Eloquent 会自动识别 deleted_at 为日期类型。
数据库迁移中添加 deleted_at 字段
要支持软删除,数据表必须包含一个 nullable 的 deleted_at 字段。可以使用迁移文件中的 softDeletes() 方法来添加它。
示例:创建用户表并添加软删除字段
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('deleted_at')->nullable(); // 手动写法
// 或者使用下面这行:
// $table->softDeletes();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
}
提示: 使用 $table->softDeletes(); 是更简洁的方式,它会自动生成一个 nullable 的 timestamp 类型的 deleted_at 字段。
执行软删除与恢复
一旦模型启用了软删除,调用 delete() 方法不会真正删除记录,而是将 deleted_at 设置为当前时间。
示例:执行软删除
$user = User::find(1); $user->delete(); // 此时 deleted_at 被设置,数据仍在数据库中
要恢复已被软删除的记录,可以调用 restore() 方法。
Songtell
Songtell是第一个人工智能生成的歌曲含义库
164
查看详情
示例:恢复已删除的记录
$user = User::withTrashed()->find(1); $user->restore(); // 恢复数据,deleted_at 设为 null
说明:
- delete():设置 deleted_at 时间戳
- restore():清除 deleted_at,恢复数据
- forceDelete():彻底删除记录,绕过软删除
查询软删除数据
默认情况下,启用了软删除的模型查询会自动排除已被删除的记录。但你可以使用以下方法控制查询行为:
- withTrashed():包含已被软删除的记录
- onlyTrashed():只查询已被软删除的记录
- withoutTrashed():排除软删除数据(默认行为)
// 获取所有用户,包括已删除的
$users = User::withTrashed()->get();
// 只获取已删除的用户
$trashedUsers = User::onlyTrashed()->get();
// 恢复某个已删除用户
User::onlyTrashed()->where('email', 'test@example.com')->restore();
强制删除(永久删除)
如果你确定要永久删除某条记录,可以使用 forceDelete() 方法。
$user = User::find(1); $user->forceDelete(); // 数据从数据库中彻底删除
对已经软删除的数据再次调用 forceDelete() 也会将其永久移除。
软删除事件
Lar*el 的软删除会触发特定的模型事件:
- deleting 和 deleted:在 delete() 调用时触发(软删除也触发)
- restoring 和 restored:在 restore() 调用时触发
你可以在模型中监听这些事件,用于清理关联数据或记录日志。
protected static function booted()
{
static::deleted(function ($user) {
// 删除用户时,清理其文章草稿
$user->drafts()->delete();
});
static::restored(function ($user) {
// 恢复用户时,重新激活其账号状态
$user->update(['status' => 'active']);
});
}
基本上就这些。软删除在实际项目中非常实用,比如用户注销、内容回收站等场景。只要记得加字段、用 trait、理解查询作用域,就能轻松掌握。以上就是Lar*el软删除如何实现_Lar*el SoftDeletes使用详解的详细内容,更多请关注其它相关文章!
# 发送邮件
# 湖南seo服务有哪些
# 贵州网站建设者
# 沧州网站定制推广公司
# 随州营销型网站建设开发
# 怎样做好新网站优化策略
# 农产品网络营销推广策略
# 无锡网站建设详细内容
# 南平网站推广哪家强
# 薯条营销推广策略
# 新站seo漯河联系电话
# laravel
# 何为
# 自定义
# 分页
# 如何实现
# 移除
# 数据库中
# 可以使用
# 已被
# 数据恢复
# ai
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
火狐浏览器占用内存高卡顿怎么办 火狐浏览器性能优化设置技巧
知音漫客正版漫画平台_知音漫客官网账号登录
极速漫画官方主页网址 极速漫画漫画在线浏览官网链接
高德地图怎么看全景照片_高德地图全景照片浏览教程
AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南
Linux如何排查内存不足OOME问题_LinuxOOM分析教程
Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】
J*aScript数组对象转换:按指定键分组与值收集
《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元
HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全
CSS布局中意外空白:解决padding-top导致的顶部间距问题
在Runstone环境中高效处理TasteDive API的JSON数据
c++中为什么推荐使用using替代typedef_c++现代化类型别名
必由学官方平台入口 必由学在线课堂登录地址
如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】
Golang如何实现状态模式管理对象状态_Golang State模式实现技巧
电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】
KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程
解决Django多数据库/多Schema环境下外键迁移问题
支付宝如何设置安全保护_支付宝安全设置的全面教程
Yandex免登录网页版地址 Yandex搜索引擎官方访问入口
菜鸟取件码是什么怎么查 最全查询渠道汇总
在FastAPI中利用lifespan与依赖注入高效管理Redis连接池
Bing引擎入口最新2025 Bing搜索免费官方登录
CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示
HTML长属性值处理:表单action路径优化与代码规范应对
优化Django表单:提交验证失败后保留用户输入
windows10怎么查看本机ip_windows10命令提示符ipconfig使用
中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】
俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口
如何使用纯J*aScript判断Input元素是否在特定类容器内
AO3官方镜像站点汇总 AO3同人作品网页版直达链接
J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析
深入理解J*a编译器的兼容性选项:从-source到--release
期待已久:小米17 Ultra、小米首款NAS本月登场
ACG动漫视频网入口 ACG动漫*免费正版观看地址
Fabric模组开发:自定义物品与物品组的现代管理方法
ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版
蛙漫官网漫画入口地址_蛙漫在线畅读无广告弹窗
不同用户不同价格! 索尼开启账户个性化定价测试
蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源
不会效仿卡普空!《铁拳》制作人澄清:不采取赛事付费|直播|
Python模块化编程:有效管理依赖与避免循环引用
win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】
怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】
德邦快递查询平台 德邦快递物流信息查询入口
解决Python logging 中 datefmt 导致时间戳固定不变的问题
Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】
荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程
特斯拉自动驾驶房车计划曝光 原型车将于2027年亮相


2025-12-09
浏览次数:次
返回列表
oquent\SoftDeletes;
class User extends Model
{
use SoftDeletes;
protected $dates = ['deleted_at']; // 可选:如果使用 $dates,可直接操作 Carbon 实例
}