改进validate类的unique规则

This commit is contained in:
thinkphp
2016-03-20 20:51:57 +08:00
parent ba281e8a7f
commit 29f3af7e35

View File

@@ -485,19 +485,23 @@ class Validate
* 验证是否唯一 * 验证是否唯一
* @access protected * @access protected
* @param mixed $value 字段值 * @param mixed $value 字段值
* @param mixed $rule 验证规则 格式:数据表,字段名,排除ID,主键名 * @param mixed $rule 验证规则 格式:数据表,字段名,排除ID
* @param array $data 数据 * @param array $data 数据
* @return bool * @return bool
*/ */
protected function unique($value, $rule, $data, $key) protected function unique($value, $rule, $data)
{ {
$rule = explode(',', $rule); $rule = explode(',', $rule);
$model = Loader::table($rule[0]); $model = Loader::table($rule[0]);
$pk = $model->getPk();
$field = isset($rule[1]) ? $rule[1] : $key; $field = isset($rule[1]) ? $rule[1] : $key;
$except = isset($rule[2]) ? $rule[2] : null; if (isset($rule[2])) {
$pk = isset($rule[3]) ? $rule[3] : 'id'; $except = $rule[2];
} elseif (isset($data[$pk])) {
$except = $data[$pk];
}
$map[$field] = $value; $map[$field] = $value;
if (!is_null($except)) { if (isset($except)) {
$map[$pk] = ['neq', $except]; $map[$pk] = ['neq', $except];
} }
if ($model->where($map)->find()) { if ($model->where($map)->find()) {