如何编写规则来验证多个列的组合在Laravel6,PHP中必须是唯一的?
假设您有一个如何编写规则来验证多个列的组合在Laravel6,PHP中必须是唯一的?,laravel,validation,unique,multiple-columns,rules,Laravel,Validation,Unique,Multiple Columns,Rules,假设您有一个users表,其中包含email列,并且每个用户的电子邮件必须是唯一的,您可以在Laravel中使用以下验证规则 [ 'email' => 'unique:users,email,' . $user->id, ] 在我的例子中,我的users表如下所示 id email type id email type 1 A@mail.com 1 // OK! unique 2
users
表,其中包含email
列,并且每个用户的电子邮件必须是唯一的,您可以在Laravel中使用以下验证规则
[
'email' => 'unique:users,email,' . $user->id,
]
在我的例子中,我的users
表如下所示
id
email
type
id email type
1 A@mail.com 1 // OK! unique
2 A@mail.com 2 // OK! unique
3 B@mail.com 1 // OK! unique
4 B@mail.com 2 // OK! unique
5 A@mail.com 1 // NOT OK! already exists with id = 1.
6 B@mail.com 2 // NOT OK! already exists with id = 4.
对于我的用例,电子邮件
和类型
的组合必须是唯一的,这意味着电子邮件
可以存在多个时间,类型
。但是电子邮件
和类型
的组合必须是唯一的。期望的结果如下所示
id
email
type
id email type
1 A@mail.com 1 // OK! unique
2 A@mail.com 2 // OK! unique
3 B@mail.com 1 // OK! unique
4 B@mail.com 2 // OK! unique
5 A@mail.com 1 // NOT OK! already exists with id = 1.
6 B@mail.com 2 // NOT OK! already exists with id = 4.
如何编写规则来验证
电子邮件
和类型
的组合在PHP的Laravel中必须是唯一的,以防止id为5
和6
的记录被插入数据库?Laravel的唯一验证规则不能很好地将字段组合处理为唯一。因此,您最好的选择是使用自定义查询实现。可能闭包选项是最容易实现的(但您需要修改的用户实例):
如果您收到请求中的两个字段(类型和电子邮件),您可以在注释中查看由Caddy DZ链接的解决方案,但我认为这不是您的情况。找到了一些紧凑的解决方案。这对我来说既适用于创建,也适用于更新
[
'column_1' => 'required|unique:TableName,column_1,' . $this->id . ',id,colum_2,' . $this->column_2
]
注:在Laravel 6中测试
我确实在其他人的另一个问题(多列上的Laravel unique validation)中给出了这个答案。我会亲自在数据库级别处理这个问题,并捕获唯一的键错误。