如何验证Laravel中两个字段的唯一组合?

时间:2019-02-18 15:49:09

标签: php laravel validation unique registration

我正在尝试对新用户的注册添加验证约束,并且我希望两个字段的组合在数据库中是唯一的。我收到的错误是从数据库中得知我违反了完整性约束。我拥有的表称为用户,而我想要具有唯一组合的字段称为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);
                        })
        ],

2 个答案:

答案 0 :(得分:1)

names = ['foo', 'bar'] for name in names: df2 = df[df.Name == name] >>>df2 Name Numbers Mean 1 foo 123 2 $ssn似乎没有在任何地方定义。您可以尝试以下方法:

$lastfour

答案 1 :(得分:0)

您还可以使用两个查询

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