Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何验证Laravel中两个字段的唯一组合?_Php_Laravel_Validation_Unique_Registration - Fatal编程技术网

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

Php 如何验证Laravel中两个字段的唯一组合?,php,laravel,validation,unique,registration,Php,Laravel,Validation,Unique,Registration,我试图在注册新用户时添加验证约束,我希望两个字段的组合在数据库中是唯一的。我得到的错误来自数据库,它说我违反了完整性约束。我所拥有的表被称为users,我希望具有唯一组合的字段被称为ssn和lastfour 我添加了行$table->unique(数组('ssn','lastfour');在用户迁移中,我还在注册中添加了一些字段,这些字段工作正常,数据库也正常。我在大约9个月前发布的一个类似问题中尝试了该解决方案,但我在“Rule::unique('servers')->where(functi

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

我添加了行$table->unique(数组('ssn','lastfour');在用户迁移中,我还在注册中添加了一些字段,这些字段工作正常,数据库也正常。我在大约9个月前发布的一个类似问题中尝试了该解决方案,但我在“Rule::unique('servers')->where(function($query)use($ssn,$lastfour)”一行中得到了未定义的变量

我尝试了以下代码

'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);
                        })
        ],

$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'],
    ]);
}

$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'],
    ]);
}

您还可以使用两个查询

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

您还可以使用两个查询

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

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