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

flysnownet發表於2020-12-23

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|checkMobile',

    ];

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

    protected $message  =   [
        'name.max'     =>  '姓名不能超過20個字元',
        'name.require' =>   '姓名不能為空',
        'user_name.max' =>   '使用者名稱不能超過20個字元',
        'user_name.require' =>   '使用者名稱不能為空',
        'mobile.mobile' =>   '手機號碼錯誤',
        'mobile.unique' =>   '手機號碼存在,請確認後重新填寫',

    ];
}

日誌記錄執行sql如下

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

相關文章