Laravel Validator 校验 验证 unique 疑惑 求解答?
版本laravel 5.1
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
//这里的 unique:users 开始我以为是从users表里面直接查的
然后一直追踪代码到Illuminate\Validation\Validator.php
代码1033行 结尾出调用
$verifier->getCount($table, $column, $value, $id, $idColumn, $extra)
我很不明白 字段‘email’的值 xxx.qq.com在users表唯一性
dd($verifier->getCount('users', 'email', 'xxx.qq.com', null, null, [])); 如果不存在返回0 否则1
getCount代码注释说是利用计算具有给定值的集合中的对象数 不明白具体是怎么做到的
求解答 谢谢
难道不是
@施国鹏 没看到啊调用这个啊!结尾处就是$verifier->getCount了 所以我很疑惑
@ahkxhyl 我没找到你这个方法。
@施国鹏 Illuminate\Validation\Validator.php
代码1033行 结尾出调用
$verifier->getCount($table, $column, $value, $id, $idColumn, $extra)
@ahkxhyl 版本不一样, 我用的是 5.5,找到了在
trait ValidatesAttributes
里面, 但是并没有找到这个方法的定义, 我再找找看。@施国鹏 我用的是5.1的 不好意思啊 我没说明
这个流程我现在知道了 我用xdebug跑了一遍 无意中看到DatabasePresenceVerifier实现了PresenceVerifierInterface接口
而PresenceVerifierInterface接口里面有
public function getCount($collection, $column, $value, $excludeId = null, $idColumn = null, array $extra = []);
//DatabasePresenceVerifier 关键处代码
public function getCount($collection, $column, $value, $excludeId = null, $idColumn = null, array $extra = [])
{
$query = $this->table($collection)->where($column, '=', $value); //注意看这里 一切明朗了
我也跑了一遍,大概跑出了 sql 语句。
忘记贴路由的了:
@施国鹏 辛苦了 谢谢!