Laravel中的软删除讲解
在 Laravel 中,软删除是一个非常有用的功能。当您需要保留已删除数据的历史记录时,软删除就派上用场了。
软删除的实现原理如下:
-
在数据库表中添加
deleted_at
字段: 当一条记录被"删除"时,Laravel 会将该记录的deleted_at
字段更新为当前时间,而不是真正从数据库中删除该记录。 -
使用
SoftDeletes
trait: 在 Laravel 的 Eloquent 模型中,您可以使用SoftDeletes
trait 来启用软删除功能。这个 trait 会为您的模型添加一些方法和属性,使您能够更方便地管理软删除的数据。
下面是一个示例:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Post extends Model { use HasFactory, SoftDeletes; // 其他模型属性和方法 }
启用软删除后,您可以使用以下方法来管理已删除的数据:
-
删除记录: 使用
delete()
方法,这将更新deleted_at
字段,而不是真正删除记录。$post = Post::find(1); $post->delete(); -
恢复已删除的记录: 使用
restore()
方法,这将把deleted_at
字段设置为null
。$post = Post::withTrashed()->find(1); $post->restore(); -
只查看已删除的记录: 使用
onlyTrashed()
方法。$deletedPosts = Post::onlyTrashed()->get(); -
查看所有记录(包括已删除的): 使用
withTrashed()
方法。$allPosts = Post::withTrashed()->get(); -
永久删除记录: 使用
forceDelete()
方法,这将从数据库中完全删除记录。$post = Post::withTrashed()->find(1); $post->forceDelete();
软删除的主要优点包括:
- 数据保留: 即使记录被"删除",您仍然可以访问它们的历史记录,这对于审计、报告等很有帮助。
- 性能优化: 由于数据并未真正从数据库中删除,因此查询速度通常更快。
- 简单实现: 使用
SoftDeletes
trait 可以轻松地在 Eloquent 模型中启用软删除功能。
总的来说,Laravel 的软删除功能为开发人员提供了一种灵活、高效的方式来管理数据的生命周期,同时保留了重要的历史记录。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现