记录:TP6 验证器验证唯一性时排除软删除数据,排除本身。
控制器controller
/**
* @NodeAnotation(title="添加")
*/
public function add($id = null)
{
if ($this->request->isAjax()) {
$post = $this->request->post();
$this->validate($post,'GoodsCate',[],false);
try {
$post['status'] = 1;
$save = $this->model->save($post);
} catch (\Exception $e) {
$this->error('保存失败');
}
$save ? $this->success('保存成功') : $this->error('保存失败');
}
$pidMenuList = $this->model->getPidMenuList();
$this->assign('id', $id);
$this->assign('pidMenuList', $pidMenuList);
return $this->fetch();
}
验证器validate
<?php
declare (strict_types = 1);
namespace app\admin\validate;
use think\Validate;
class GoodsCate extends Validate
{
/**
* 定义验证规则
* 格式:'字段名' => ['规则1','规则2'...]
*
* @var array
*/
protected $rule = [
'pid|上级分类' => 'require',
'name|分类名称' => 'require|checkUnique',
];
// 自定义验证规则
protected function checkUnique($value,$rule,$data=[],$field)
{
$where = [['delete_time','=',Null],[$field,'=',$value]];
array_key_exists('id',$data) ? $where[] = ['id','<>',$data['id']] : '';
$count = \app\admin\model\GoodsCate::where($where)->count();
if($count){
return false;
}
return true;
}
/**
* 定义错误信息
* 格式:'字段名.规则名' => '错误信息'
*
* @var array
*/
protected $message = [
'name.checkUnique' => '分类名称已存在',
];
}