使用 2 个字段的唯一 Laravel 表单验证

2022-08-30 21:50:37

如何在 2 个字段上设置唯一的验证规则?

一个。应用程序不应允许两个人具有相同的名字和姓氏。

允许用户仅填写名字或姓氏。因为用户可能只有其中之一。

b.但是,如果用户只输入名字 (Glen),则表中的其他人不应具有相同的名称(名字 = 'Glen' 和姓氏 = null)。另一个“格伦史密斯”好吧。

我尝试了以下规则。当两个字段(名字和姓氏)都不为空时,它工作得很好:

'firstName' => 'unique:people,firstName,NULL,id,lastName,' . $request->lastName

当只有一个字段存在时,此规则在 b. 上失败。

任何提示?


答案 1

内置的验证器不会真正支持你想要做的事情。其目的是确保单个 valid 在数据库中是唯一的,而不是两个值的组合。但是,您可以创建自定义验证程序unique

Validator::extend('uniqueFirstAndLastName', function ($attribute, $value, $parameters, $validator) {
    $count = DB::table('people')->where('firstName', $value)
                                ->where('lastName', $parameters[0])
                                ->count();

    return $count === 0;
});

然后,您可以使用以下命令访问此新规则:

'firstName' => "uniqueFirstAndLastName:{$request->lastName}"

您可能会发现,由于数据库查询未经测试,因此可能需要稍微调整一下。


答案 2

我想你正在寻找这样的东西:

 'unique:table_name,column1,null,null,column2,'.$request->column2.',column3,check3'

推荐