Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法

laravel软删除通过添加deleted_at字段和使用SoftDeletes trait实现,调用delete()时填充该字段而不真正删除数据,查询默认忽略已删除记录,可用withTrashed()或onlyTrashed()获取包含或仅含已删除数据,restore()方法可恢复数据,forceDelete()则永久删除记录。

Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法

Laravel 的 Eloquent ORM 提供了“软删除”功能,允许你标记数据为已删除,而不是真正从数据库中移除。这样可以在需要时恢复数据,同时保持数据完整性。实现软删除非常简单,只需几个步骤即可完成。

启用软删除功能

要在模型中启用软删除,需执行以下操作:

  • 在对应的数据表中添加 deleted_at 字段,通常使用 softDeletes() 方法创建迁移。
  • 在 Eloquent 模型中引入 IlluminatedatabaseEloquentSoftDeletes trait。

示例:创建带有 softDeletes 的迁移

 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 IlluminateDatabaseEloquentModel; use IlluminateDatabaseEloquentSoftDeletes;  class User extends Model {     use SoftDeletes; } 

执行软删除操作

启用软删除后,调用模型的 delete() 方法不会真正删除记录,而是将 deleted_at 字段设置为当前时间戳。

 $user = User::find(1); $user->delete(); // 此时 deleted_at 被填充,数据仍存在于数据库 

查询时,Eloquent 会自动过滤掉已软删除的记录,即默认查询只返回未删除的数据。

Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法

冬瓜配音

AI在线配音生成器

Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法 584

查看详情 Laravel如何使用软删除(Soft Deletes)功能_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如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法的详细内容,更多请关注php中文网其它相关文章!

上一篇
下一篇
text=ZqhQzanResources