Laravel 软删除报错问题解析及解决方案

问题背景
在 Laravel 框架中,软删除是一种常用的数据删除方式,它通过在数据表中添加一个名为 deleted_at 的字段,来标记一条数据是否被删除,当调用软删除方法时,实际上并不是真的删除数据,而是将 deleted_at 字段的值设置为当前时间,在实际使用过程中,有时候会遇到软删除报错的情况,本文将针对这一问题进行解析及解决方案的探讨。
报错原因
- 缺少
deleted_at字段
在软删除过程中,如果数据表中缺少 deleted_at 字段,将导致报错,这是因为 Laravel 需要使用该字段来标记数据是否被删除。
字段类型错误
deleted_at 字段的数据类型应为 timestamp 或 datetime,如果字段类型错误,也会导致软删除报错。
模型配置错误
在模型中,需要配置 SoftDeletes trait 来启用软删除功能,如果模型配置错误,将无法正常进行软删除操作。

查询条件错误
在软删除操作中,如果查询条件错误,可能导致无法正确删除数据,从而引发报错。
解决方案
- 添加
deleted_at字段
在数据表中添加 deleted_at 字段,数据类型为 timestamp 或 datetime,以下为 SQL 语句示例:
ALTER TABLE `your_table_name` ADD COLUMN `deleted_at` TIMESTAMP NULL DEFAULT NULL;
修改字段类型
deleted_at 字段类型错误,可以使用以下 SQL 语句修改字段类型:
ALTER TABLE `your_table_name` MODIFY COLUMN `deleted_at` TIMESTAMP NULL DEFAULT NULL;
配置模型
在模型中,配置 SoftDeletes trait 来启用软删除功能,以下为示例代码:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class YourModel extends Model
{
use SoftDeletes;
} 查询条件正确
确保查询条件正确,以便正确删除数据,以下为示例代码:
YourModel::where('id', 1)->delete(); FAQs
问题:如何查看软删除数据?
解答:可以使用 onlyTrashed() 方法来查询已软删除的数据:
$trashedData = YourModel::onlyTrashed()->get();
问题:如何永久删除软删除数据?
解答:可以使用 forceDelete() 方法来永久删除软删除数据:
YourModel::onlyTrashed()->where('id', 1)->forceDelete(); 
