2017-06-01 76 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');