Php Laravel验证-唯一用户名

Php Laravel验证-唯一用户名,php,laravel,laravel-5,laravel-5.3,Php,Laravel,Laravel 5,Laravel 5.3,我在让验证正常工作时遇到问题,目前它在不应该通过的时候通过了 用户名字段(users.Username)应根据users表中的client\u id而唯一。不同的客户端可以具有与其他客户端相同的用户名 $rule['username'] = Rule::unique('users', 'username')->where(function ($query) { $query->where('client_id', $this->

我在让验证正常工作时遇到问题,目前它在不应该通过的时候通过了

用户名字段(
users.Username
)应根据
users
表中的
client\u id
而唯一。不同的客户端可以具有与其他客户端相同的用户名

$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\u id=2


不允许用户1将其用户名更改为用户2。

您的验证逻辑工作正常,没有任何问题。只需确保您传递了正确的用户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');

您的验证逻辑工作完美,没有任何问题。只需确保您传递了正确的用户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');