Laravel验证 - 唯一用户名

时间:2017-06-01 15:31:40

标签: php laravel laravel-5 laravel-5.3

我在验证验证工作正常时遇到问题,目前它在不应该传递时通过。

用户名字段(users.username)应该基于client_id表中的users而唯一。不同的客户端可以拥有来自其他客户端的相同用户名。

$rule['username'] = Rule::unique('users', 'username')->where(function ($query) {
                         $query->where('client_id', $this->user()->client_id);
                   })->ignore($this->user()->id, 'id');

例如:

User1和Users2属于client_id = 2

User1不允许将用户名更改为Users2。

1 个答案:

答案 0 :(得分:0)

您的验证逻辑完美运行,没有任何问题。只需确保传递正确的用户ID和客户端ID。

样本条件

DB data
id  username    client_id
1   user1       1
2   user2       1
3   user2       2

Request data by user with id 1 (client_id - 1)
username        validation
user1           pass
user2           fail
user3           pass

Request data by user with id 3 (client_id - 2)
username        validation
user1           pass
user2           pass
user3           pass

示例测试代码

$userId = 1;
$userClientId = 1;

$data = [
    'username' => 'user1',
];

$validator = \Validator::make($data, [
    'username' => Rule::unique('users', 'username')->where(function ($query) use ($userClientId) {
        $query->where('client_id', $userClientId);
    })->ignore($userId)
]);

if ($validator->fails()) {
    dd('fail');
}

dd('pass');