thinkphp驗證器獲取$data資料,自定義驗證,多條件唯一性驗證unique驗證
阿新 • • 發佈:2020-12-24
技術標籤: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' => '手機號碼已存在', ];