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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 10

难道不是

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

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

6年前 评论

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

6年前 评论

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

6年前 评论

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

6年前 评论

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

6年前 评论

这个流程我现在知道了 我用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();
}
6年前 评论

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

file

file

file

6年前 评论

忘记贴路由的了:

file

6年前 评论

@施国鹏 辛苦了 谢谢!

6年前 评论

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