unique 求助

'email' => 'unique:users,email_address,NULL,id,account_id,1'
我要验证servers表里address+port的唯一性,我的代码是这样的:

$port = Input::has('port') ? Input::get('port') : 80;
$address = Input::get('address');

$rules = array(
'address' => 'unique:servers,address,NULL,id,port,' . $port
);

$validator_address = Validator::make($address, $rules);

反正结果是没验证成功,我加了好几条相同的记录
已邀请:

Mr_Jing

赞同来自: __________ FiveSay

表示可行,
我是以username + email为例子试验的。
你可以输出SQL日志看看
DB::getQueryLog()

// 数据库里有一条数据:INSERT INTO `app_test`.`users` (`id`, `username`, `email`, `created_at`, `updated_at`) VALUES ('1', 'a', 'a@qq.com', '0000-00-00 00:00:00', '0000-00-00 00:00:00');
    $username = 'a';
    $input = array(
        'email' => 'a@qq.com',
    );
    $rules = array(
        'email' => 'unique:users,email,NULL,id,username,' . $username,
    );
    $validator = Validator::make($input, $rules);
    var_dump($validator->fails(), $validator->messages(), DB::getQueryLog());

输出:
bool(true)

object(Illuminate\Support\MessageBag)#151 (2) {
["messages":protected]=>
array(1) {
["email"]=>
array(1) {
  [0]=>
  string(33) "The email has already been taken."
}
}
["format":protected]=>
string(8) ":message"
}

array(1) {
[0]=>
array(3) {
["query"]=>
string(78) "select count(*) as aggregate from `users` where `email` = ? and `username` = ?"
["bindings"]=>
array(2) {
  [0]=>
  string(8) "a@qq.com"
  [1]=>
  string(1) "a"
}
["time"]=>
float(0)
}
}

要回复问题请先登录注册