1. 程式人生 > 其它 >thinkphp驗證器獲取$data資料,自定義驗證,多條件唯一性驗證unique驗證

thinkphp驗證器獲取$data資料,自定義驗證,多條件唯一性驗證unique驗證

技術標籤:thinkPHPphpmysqlthinphp唯一性驗證

thinkphp驗證器獲取$data資料,自定義驗證,多條件唯一性驗證,軟刪除驗證唯一性,unique驗證

問題描述

專案中使用軟刪除,資料刪除後驗證器裡唯一性驗證不通過,需要位元組拼接條件

如下

// 複雜驗證條件
'name'   => 'unique:user,status=1&account='.$data['account'],

但是預設rule規則裡不能直接獲取到$data

解決方法

使用自定義驗證拿到$data再驗證唯一性

程式碼

class Teacher extends Validate
{

    protected $rule = [
        'name|姓名'         =>  'require|max:20',
        'user_name|使用者名稱'         =>  'require|max:20|unique:teacher',
        'role_id|角色'    =>  'number',
        'mobile|手機號'    =>  'mobile|checkUnique',

    ];

    // 自定義驗證規則
    protected function checkUnique($value,$rule,$data=[],$field)
    {
        $rule = ['mobile'    =>  "unique:teacher,delete_time=0&$field=$value"];
        return $this->check($data,$rule);
    }

    protected $message  =   [
        'mobile.checkUnique' =>   '手機號碼已存在',
    ];



}

日誌記錄執行sql如下

LOG: SELECT `id` FROM `teacher` WHERE  `delete_time` = 0  AND `mobile` = '18812345678' LIMIT 1

改造支援所有欄位

    // 自定義驗證規則
    protected function checkUnique($value,$rule,$data=[],$field,$title)
    {
        $rule = ["$field|$title"    =>  "unique:teacher,delete_time=0&$field=$value"];
        //編輯時帶有id,多條件會導致異常,用原有方式驗證
        if ($data['id'])
            $rule = ["$field|$title"    =>  "unique:teacher"];
        return $this->check($data,$rule);
    }

    protected $message  =   [
//        'mobile.checkUnique' =>   '手機號碼已存在',
    ];