2017-06-01 135 views
1

我有问题得到验证正常工作,目前它是通过时,它不应该通过。Laravel验证 - 唯一的用户名

根据users表中的client_id,用户名字段(users.username)应该是唯一的。不同的客户端可以有其他客户端的相同用户名

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

例如:

用户1和Users2都属于client_id = 2

用户1不允许他们的用户名更改为Users2。

回答

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');