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

3

这是我的验证规则:

$validationCondition    = array(
                            'fname'     => 'required|min:2',
                            'lname'     => 'required|min:2',
                            'email'     => 'required|email|unique:users,email',
                            'isd'       => 'required|unique:users,isd',
                            'mobile'    => 'required',
                            'password'  => 'required'
                        );
$validationMessages     = array(
                            'fname.required'    => 'Please provide first name',
                            'fname.min'         => 'First name should be atleast 3 characters long',

                            'lname.required'    => 'Please provide last name',
                            'lname.min'         => 'Last name should be atleast 3 characters long',

                            'email.required'    => 'Please provide email',
                            'email.email'       => 'Please provide a valid email id',
                            'email.unique'      => 'This email id has already been registered. Choose any other valid email id.',

                            'isd.required'      => 'The city name should be atleast 3 characters long',

                            'mobile.required'   => 'Please provide mobile number',

                            'password.required' => 'Please provide password'
                        );

在用户表中,需要检查 isdmobile 两个字段,以确保联系电话号码的唯一性。
如何进行检查?我知道如何检查单个字段的唯一性,但不知道如何检查组合值的唯一性。

1
我认为没有办法做到这一点。但是你可以使用这个包来实现你的最终目标:https://github.com/felixkiss/uniquewith-validator。你也可以尝试设置一些自定义验证器。https://laravel.com/docs/5.6/validation#custom-validation-rules - Kevin Pimentel
2个回答

11
$validationCondition = array(
    ...
    'isd' => 'required',
    'mobile' => 'required|unique:users,mobile,NULL,id,isd,' . $request->isd,
    ...
);

那个对于mobileunique规则的意思是:在所有现有用户中,具有相同isd值的mobile的值必须是唯一的。

这里的$request是您正在验证的传入请求的实例(显然)。


1
完美!这真是太棒了。NULL 是什么作用? - Saswat
1
NULL,id 部分负责 unique 规则中的 ignore 参数。这些参数只是默认值,因为我们不使用它们,但需要获取 unique 规则的 where 参数。如果您指定模型 ID 而不是 NULL,则 unique 规则将忽略具有此 ID 的行(在更新现有行时很有用,以便其当前值不包含在唯一性检查中)。 您可以在 此处 阅读更多信息。 - d3jn

1
你可以像下面这样使用:
'mobile'  => 'required|unique:users,mobile,NULL,id,mobile,isd'

获取更多详细信息从文档中


1
你的链接已经失效了,我认为以下是最新的链接:https://laravel.com/docs/9.x/validation#rule-unique - wruckie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接