跨两个字段的唯一验证


Unique validation across two fields

我正在Laravel 5中建立一个网站,用户可以通过选择名字和姓氏来创建一个角色。

我已经围绕这个建立了一些验证规则,但是在实现唯一验证时有点难倒,因为我需要它来验证他们的全名,这是在我的数据库中的两列。例如,用户可以创建一个名为"Jon Snow"的字符,但验证需要检查这两个字段的组合是否唯一,因为其他人可能想要创建字符"Jon Doe"。

我现在意识到,当我写这篇文章的时候,我可以把这两列合并成一列,然后对它进行验证。

但是在我走那条路之前,有没有办法像我需要的那样跨两个字段运行验证?

下面是我的验证:

public function store(Request $request)
    {
        $character = new Characters;
         $validator = Validator::make($request->all(), [
            'firstname' => 'required|between:2,15',
            'lastname' => 'required|between:2,15',
        ], [
            'firstname.required' => 'You need to provide a first name!',
            'lastname.required' => 'You need to provide a last name!',
            'firstname.between' => 'The first name must be between :min - :max characters long.',
            'lastname.between' => 'The last name must be between :min - :max characters long.',
        ]);

看一下这个felixkiss/uniquewith-validator包。它包含了Laravel的validateUnique规则的变体,允许对多列UNIQUE索引进行验证。

只是一个想法,验证后,

$firstName = Input::get('firstname');
$lastName = Input::get('lastname');
$whereStatement = ['firstname' => $firstName, 'lastname' => $lastname];
现在使用query
$user = DB::table('yourtablename')->where($whereStatement)->count()
if ($user > 1){
 //then redirect back user saying the name must be uniqe
}
else{
//save data to database
}