【问题标题】:Laravel Validation - Unique UsernameLaravel 验证 - 唯一用户名
【发布时间】:2017-11-02 20:24:01
【问题描述】:

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

用户名字段 (users.username) 基于 users 表中的 client_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_id = 2

User1 不允许将其用户名更改为 Users2。

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.3


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-10-16
      • 2013-07-09
      • 2021-03-08
      • 2018-07-29
      • 1970-01-01
      • 2019-05-08
      • 2016-06-26
      • 1970-01-01
      • 2017-10-11
      相关资源
      最近更新 更多