我在验证验证工作正常时遇到问题,目前它在不应该传递时通过。
用户名字段(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。
答案 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');