2017-06-01 25 views
1

Validationを正常に動作させるのに問題がありますが、現在は渡されないと渡されます。Laravel検証 - 固有のユーザー名

ユーザー名フィールド(users.username)は、の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

検証ロジックは問題なく完全に動作します。正しいユーザー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'); 
関連する問題