改进Validate类的unique规则 支持验证字段和数据表字段 分开

This commit is contained in:
thinkphp
2016-05-23 18:22:18 +08:00
parent 71d5e668d1
commit 87d544f331

View File

@@ -697,28 +697,28 @@ class Validate
$rule = explode(',', $rule); $rule = explode(',', $rule);
} }
$db = Db::name($rule[0]); $db = Db::name($rule[0]);
$field = isset($rule[1]) ? $rule[1] : $field; $key = isset($rule[1]) ? $rule[1] : $field;
if (strpos($field, '^')) { if (strpos($key, '^')) {
// 支持多个字段验证 // 支持多个字段验证
$fields = explode('^', $field); $fields = explode('^', $key);
foreach ($fields as $field) { foreach ($fields as $key) {
$map[$field] = $data[$field]; $map[$key] = $data[$key];
} }
} elseif (strpos($field, '=')) { } elseif (strpos($key, '=')) {
parse_str($field, $map); parse_str($key, $map);
} else { } else {
$map[$field] = $data[$field]; $map[$key] = $data[$field];
} }
$key = strval(isset($rule[3]) ? $rule[3] : $db->getPk()); $pk = strval(isset($rule[3]) ? $rule[3] : $db->getPk());
if (isset($rule[2])) { if (isset($rule[2])) {
$map[$key] = ['neq', $rule[2]]; $map[$pk] = ['neq', $rule[2]];
} elseif (isset($data[$key])) { } elseif (isset($data[$pk])) {
$map[$key] = ['neq', $data[$key]]; $map[$pk] = ['neq', $data[$pk]];
} }
if ($db->where($map)->field($key)->find()) { if ($db->where($map)->field($pk)->find()) {
return false; return false;
} }
return true; return true;