【问题标题】:how to validate unique combination of two fields in Laravel?如何验证 Laravel 中两个字段的唯一组合?
【发布时间】:2019-07-12 01:13:54
【问题描述】:

我正在尝试为新用户的注册添加验证约束,并且我希望两个字段的组合在数据库中是唯一的。我得到的错误来自数据库,说我违反了完整性约束。我拥有的表称为用户,我想要具有唯一组合的字段称为 ssn 和 lastfour。

我添加了行 $table->unique(array('ssn','lastfour'));在用户迁移中,我还在注册中添加了一些工作正常且数据库正常的字段。我在大约 9 个月前Laravel unique validation on multiple columns 发布的类似问题中尝试了解决方案,但我在 "Rule::unique('servers')->where(function ($query) use($ssn,$lastfour) "

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => ['required', 'string', 'max:255'],
        'lastname' => ['required', 'string', 'max:255'],
        'username' => ['required', 'string', 'max:255', 'unique:users'],
        'ssn' => ['required', 'string', 'regex:/^[0-9]*$/','max:8', 'min:8'],
        'lastfour' => ['required', 'string', 'regex:/^[0-9]*$/','max:4', 'min:4'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'string', 'min:6', 'confirmed'],
    ]);
}

我尝试了以下代码

'lastfour' => ['required', 'string', 'regex:/^[0-9]*$/','max:4', 'min:4', 
                        Rule::unique('users')->where(function ($query) use 
                        ($ssn, $lastfour){
                            return $query->where('ssn', $ssn)
                            ->where('lastfour', $lastfour);
                        })
        ],

【问题讨论】:

  • 您说您尝试过Rule::unique,但我在您共享的代码中没有看到它
  • 我忘记了尝试过的代码。我现在发布了

标签: php laravel validation unique registration


【解决方案1】:

你也可以使用两个查询

$uniqueRule =  Rule::unique('users')->where(function ($query) use ($data){
    $query->where('ssn', $data['ssn']);
    $query->where('lastfour', $data['lastfour']);
});

【讨论】:

    【解决方案2】:

    $ssn 和 $lastfour 似乎没有在任何地方定义。您可以尝试以下方法:

    protected function validator(array $data)
    {
        $uniqueRule =  Rule::unique('users')->where(function ($query) use 
                        ($data){
                            return $query->where('ssn', $data['ssn']??'')
                            ->where('lastfour', $data['lastfour']??'');
                        });
    
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'lastname' => ['required', 'string', 'max:255'],
            'username' => ['required', 'string', 'max:255', 'unique:users'],
            'ssn' => ['required', 'string', 'regex:/^[0-9]*$/','max:8', 'min:8',  $uniqueRule ],
            'lastfour' => ['required', 'string', 'regex:/^[0-9]*$/','max:4', 'min:4'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:6', 'confirmed'],
        ]);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-01-04
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 2010-12-10
      • 2019-03-24
      • 2023-04-07
      • 2015-12-07
      • 2018-04-28
      相关资源
      最近更新 更多