使用背景环境描述
ThinkPHP在使用软删除功能删除用户数据后,再次插入数据时,遇到唯一性验证问题 ‘username|用户名’ => ‘require|alphaDash|min:4|max: 20|unique:user’ 提示已经存在。此时查看数据库确实数据已存在,且delete_time字段标记为删除是的时间戳。
解决方式
修改ThinkPHP验证文件thinkphp/library/think/Validate.php文件中的unique函数。在查询语句前追加where的查询条件。$map[] = [‘delete_time’, ‘=’, null];
原理就是添加一个限制约束,唯一性判断时增加一个delete_time = null的条件,只查询所有未删除的数据进行唯一性判断。
截图说明
定义唯一性验证规则:
数据库设计,软删除delete_time字段(时间戳):
thinkPHP验证器源代码修改: