答案:laravel软删除通过Softdeletes trait和deleted_at字段实现,delete()方法仅标记删除,查询自动过滤已删除数据,withTrashed()和onlyTrashed()可查看删除记录,restore()恢复数据,forceDelete()永久删除。
在 Laravel 中,软删除(Soft Deletes)是一种让数据“看似”被删除,实则保留在数据库中的机制。通过软删除,你可以避免永久丢失数据,同时支持后续恢复操作。实现软删除非常简单,只需几个步骤即可完成。
启用软删除功能
要在模型中使用软删除,需引入 SoftDeletes trait,并添加一个用于记录删除时间的字段。
use IlluminatedatabaseEloquentSoftDeletes;
在模型类中使用该 trait:
class User extends Model
{
use SoftDeletes;
}
数据库迁移中添加 deleted_at 字段
Laravel 软删除依赖于一个 deleted_at 字段来标记删除时间。这个字段默认为 NULL,当调用 delete() 方法时,Laravel 会自动将其设置为当前时间戳。
创建或修改迁移文件时,使用 softDeletes() 方法:
Schema::table('users', function (Blueprint $table) {
$table->softDeletes();
});
然后运行迁移命令:
软删除的实际使用
启用后,调用模型的 delete() 方法不会真正从数据库中移除记录,而是更新 deleted_at 字段。
$user = User::find(1);
$user->delete(); // 此时 deleted_at 被设为当前时间
查询时,Laravel 会自动过滤掉已软删除的记录,也就是说以下代码查不到已被软删除的用户:
User::all(); // 不包含 deleted_at 非空的记录
查询软删除的数据
如果需要查看已被软删除的记录,可以使用以下方法:
- withTrashed():包含正常和已删除的记录
- onlyTrashed():仅查询已软删除的记录
// 获取所有用户,包括软删除的
User::withTrashed()->get();
// 只获取已软删除的用户
User::onlyTrashed()->get();
恢复软删除的数据
使用 restore() 方法可将软删除的记录恢复:
User::withTrashed()->find(1)->restore();
// 或链式调用
User::onlyTrashed()->where('id', 1)->restore();
执行后,deleted_at 字段会被重置为 NULL,记录重新生效。
强制永久删除
若希望彻底删除某条记录,绕过软删除机制,可使用 forceDelete():
$user = User::find(1);
$user->forceDelete(); // 永久从数据库中删除
基本上就这些。软删除是 Laravel 提供的一个实用功能,特别适用于需要保留历史数据或支持回收站功能的系统。只要记得加 trait、加字段,其余查询和操作都由框架自动处理,使用起来非常方便。不复杂但容易忽略细节,比如迁移没跑或者忘了 use SoftDeletes,会导致功能失效。
以上就是laravel中的软删除(Soft Deletes)如何使用_Laravel软删除使用方法的详细内容,更多请关注php中文网其它相关文章!