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代码注释说是利用计算具有给定值的集合中的对象数 不明白具体是怎么做到的
求解答 谢谢

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 10

难道不是

select count(*) from `users` where `email`='xxx.qq.com'
7年前 评论

@施国鹏 没看到啊调用这个啊!结尾处就是$verifier->getCount了 所以我很疑惑

7年前 评论

@ahkxhyl 我没找到你这个方法。

7年前 评论

@施国鹏 Illuminate\Validation\Validator.php
代码1033行 结尾出调用
$verifier->getCount($table, $column, $value, $id, $idColumn, $extra)

7年前 评论

@ahkxhyl 版本不一样, 我用的是 5.5,找到了在trait ValidatesAttributes里面, 但是并没有找到这个方法的定义, 我再找找看。

7年前 评论

@施国鹏 我用的是5.1的 不好意思啊 我没说明

7年前 评论

这个流程我现在知道了 我用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); //注意看这里 一切明朗了

    if (! is_null($excludeId) && $excludeId != 'NULL') {
        $query->where($idColumn ?: 'id', '<>', $excludeId);
    }

    foreach ($extra as $key => $extraValue) {
        $this->addWhere($query, $key, $extraValue);
    }

    return $query->count();
}
7年前 评论

我也跑了一遍,大概跑出了 sql 语句。

file

file

file

7年前 评论

忘记贴路由的了:

file

7年前 评论

@施国鹏 辛苦了 谢谢!

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!