假设您有一个带有users
列的email
表,并且每个用户的电子邮件必须唯一,您可以在Laravel中使用以下验证规则。
[
'email' => 'unique:users,email,' . $user->id,
]
就我而言,我的users
表如下所示
id
email
type
对于我的用例,email
和type
的组合必须唯一,这意味着email
可以存在多次,type
也是如此。但是email
和type
的组合必须唯一。所需的结果如下所示
id email type
1 [email protected] 1 // OK! unique
2 [email protected] 2 // OK! unique
3 [email protected] 1 // OK! unique
4 [email protected] 2 // OK! unique
5 [email protected] 1 // NOT OK! already exists with id = 1.
6 [email protected] 2 // NOT OK! already exists with id = 4.
[如何编写规则以验证email
和type
的组合在Laravel,PHP中必须唯一,以防止将ID为5
和6
的记录插入数据库?
Laravel的唯一验证规则不能将井场组合视为唯一字段。因此,最好的选择是使用自定义查询来实现custom validation method or class。可能闭包选项是最简单的实现(但是您需要修改后的用户实例):
function ($attribute, $value, $fail) use ($user) {
$exists = User::where('users.email', $value)
->where('users.type', $user->type)
->where('users.id', '!=', $user->id)
->count();
if ($exists) {
$fail($attribute . ' is invalid.');
}
}
如果您在请求中同时收到两个字段(类型和电子邮件),则可以在注释中查看由Caddy DZ链接的解决方案,但我认为不是您的情况。
已找到一些紧凑的解决方案。这对我来说都适用于创建和更新。
[
'column_1' => 'required|unique:TableName,column_1,' . $this->id . ',id,colum_2,' . $this->column_2
]
注意:在Laravel 6中测试。
我确实将此答案放在另一个人的另一个问题(多列中的Laravel唯一验证)上。