數(shù)據(jù)庫用的webman/think-orm
驗(yàn)證器里面定義某個(gè)字段是唯一的
經(jīng)過測試不管是添加,還是更新數(shù)據(jù):驗(yàn)證都無法通過
測試多個(gè)驗(yàn)證器都是這樣,只要有唯一就無法通過
不知道是驗(yàn)證器的問題還是模型的問題
class AdminMenu extends Validate
{
protected $rule = [
'title' => 'require',
'type' => 'require|in:1,2,3',
'name'=>'unique:AdminMenu', //這個(gè)字段無法驗(yàn)證通過
'component_path'=>'unique:AdminMenu',
];
protected $message = [
'title.require' => '請輸入菜單名稱',
'type.require' => '請選擇類型',
'type.in' => '非法的類型值',
'name.unique' => '組件name值已存在,請更換',
'component_path.unique' => '組件路勁值已存在,請更換',
];
}
tp的有下面這個(gè)方法,手動(dòng)安裝topthink/think-validate就沒得這個(gè)方法
public function unique
/**
* 基礎(chǔ)驗(yàn)證器
*/
class Base extends validate
{
/**
* 唯一驗(yàn)證
* @param $value
* @param $rule
* @param array $data
* @param string $field
* @return bool
*/
public function unique($value, $rule, array $data = [], string $field = ''): bool
{
if (is_string($rule)) {
$rule = explode(',', $rule);
}
$db = Db::table($rule[0]);
$key = $rule[1] ?? $field;
$map = [];
if (strpos($key, '^')) {
// 支持多個(gè)字段驗(yàn)證
$fields = explode('^', $key);
foreach ($fields as $key) {
if (isset($data[$key])) {
$map[] = [$key, '=', $data[$key]];
}
}
} elseif (isset($data[$field])) {
$map[] = [$key, '=', $data[$field]];
}
//獲取主鍵
if(!empty($rule[3])){
$pk = $rule[3];
}else{
$result = Db::select("SHOW KEYS FROM ".$rule[0]." WHERE Key_name = 'PRIMARY'");
$pk = $result[0]->Column_name;
}
if (is_string($pk)) {
if (isset($rule[2])) {
$map[] = [$pk, '<>', $rule[2]];
} elseif (isset($data[$pk])) {
$map[] = [$pk, '<>', $data[$pk]];
}
}
if ($db->where($map)->select($pk)->exists()) {
return false;
}
return true;
}
}
這是lv的模型 tp的話自己去源碼把拉下 復(fù)制出來就行了