thinkphp Validate 验证 unique使用说明

 首先查看一下 validate 中 unique 方法

/**
     * 验证是否唯一
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则 格式:数据表,字段名,排除ID,主键名
     * @param array     $data  数据
     * @param string    $field  验证字段名
     * @return bool
     */
    protected function unique($value, $rule, $data, $field)

解释说明

$params = $this->request->post("row/a");
$rule1 = ['username' => 'require|unique:admin,username'];
$rule2 = ['username' => 'require|unique:admin,username,' . $pk];
$rule3 = ['username' => 'require|unique:admin,username^uniacid,' . $pk];
//unique:admin 第一个参数[admin] 表示在admin表中查找数据 检测SQL: db('admin')

//unique:admin,username 第二个参数[username] 表示在admin表中根据字段username查找数据
//检测SQL: db('admin')->where('username',$params['username'])->find();

//unique:admin,username^uniacid 第二个参数[username^uniacid] 如果第二个参数里面有^ 表示联合唯一
//检测SQL: db('admin')->where('username',$params['username'])->where('uniacid',$params['uniacid'])->find();

//unique:admin,username,$pk 第三个参数[$pk] 表示在admin表中根据字段username查找主键[id] 不等于 $pk 的数据
//检测SQL: db('admin')->where('username',$params['username'])->where('id','neq',$pk)->find();

//unique:admin,username^uniacid,$pk
//检测SQL: db('admin')->where('username',$params['username'])->where('uniacid',$params['uniacid'])->where('id','neq',$pk)->find();

使用案例

创建一条数据

$this->model = model('Admin');
$params = $this->request->post("row/a");
$uniacid            = session('uniacid');
$params['uniacid']  = $uniacid;
$result             = $this->model->validate('Admin.add')->save($params);
if ($result === false) {
   $this->error($this->model->getError());
}

编辑一条数据

$params['uniacid'] = session('uniacid');
//这里需要针对username和email做唯一验证
$adminValidate = \think\Loader::validate('Admin');
$adminValidate->rule([
    'username' => 'require|regex:\w{3,12}|unique:admin,username^uniacid,' . $row->id,
    'email'    => 'require|email|unique:admin,email^uniacid,' . $row->id,
    'phone'    => 'require|phone|unique:admin,phone^uniacid,' . $row->id,
]);
$result = $row->validate('Admin.edit')->save($params);
if ($result === false) {
    $this->error($row->getError());
}

验证器 application/admin/validate/Admin.php

<?php

namespace app\admin\validate;

use think\Validate;

class Admin extends Validate
{

    /**
     * 验证规则
     */
    protected $rule = [
        'username' => 'require|regex:\w{3,12}|unique:admin,username^uniacid',
        'nickname' => 'require',
        'password' => 'require',
        'email'    => 'require|email|unique:admin,email^uniacid',
        'phone'    => 'require|phone|unique:admin,phone^uniacid',
    ];

    /**
     * 提示消息
     */
    protected $message = [
    ];

    /**
     * 字段描述
     */
    protected $field = [
    ];

    /**
     * 验证场景
     */
    protected $scene = [
        'add'  => ['username', 'email', 'phone','nickname', 'password'],
        'edit' => ['username', 'email', 'phone','nickname', 'password'],
    ];

    public function __construct(array $rules = [], $message = [], $field = [])
    {
        $this->field = [
            'username' => __('Username'),
            'nickname' => __('Nickname'),
            'password' => __('Password'),
            'email'    => __('Email'),
            'phone'    => __('Phone'),
        ];
        $this->message = array_merge($this->message, [
            'username.regex' => __('Please input correct username'),
            'password.regex' => __('Please input correct password')
        ]);
        parent::__construct($rules, $message, $field);
    }

}

不使用验证器使用

$params['username']   = $this->request->post('username');
$rules    = [
    'username'   => 'require|unique:admin,username',
];
$validate = new \think\Validate($rules);
$result   = $validate->check($params);
if (!$result) {
    $this->error($validate->getError());
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值