laravel - Laravel 唯一验证规则忽略数组传入数据
问题描述
'email' => 'required|unique:users,email,'.$user->id
我们都知道,当我们更新数据库中的实例时,当我们使用唯一验证规则时,我们应该忽略它的 id,就像上面的例子一样。
现在在我的应用程序中,我有一个 Agency 模型和一个 Employee 模型,每个 Agency 都有很多 Employee。
在我的应用程序中,我有一个表单来创建和更新代理和员工。
此表格发送的数据:
$request->validate([
'agency.name' => 'required|string',
'agency.phone' => 'required|string|unique:agencies,phone,'.$agency->id,
.
.
.
'employees.*.first_name' => 'required|string',
'employees.*.last_name' => 'required|string',
'employees.*.email' => 'required|unique:employees,email'
]);
现在,验证agency.phone
非常容易,因为我们只有 1 个代理,我们可以轻松$agency->id
忽略此实例的唯一验证规则。
'agency.phone' => 'required|string|unique:agencies,phone,'.$agency->id
现在我面临的问题是我的传入数据中有多个员工,我不能使用 id 来忽略
'employees.*.email' => 'required|unique:employees,email' // cannot add $employee->id here in order to ignore while updating
我的传入数据中确实有每个员工的 id,那么如何使用它来忽略数组传入数据的 laravel 验证规则,就像在这个例子中一样?
帮助
的输出dd($request->all())
是:
array:2 [
"agency" => array:7 [
"id" => 5
"name" => "xxxxxxx"
"manager_name" => null
"manager_phone" => null
"phone" => null
"created_at" => "2020-10-23T00:53:13.000000Z"
"updated_at" => "2020-10-23T00:53:13.000000Z"
]
"employees" => array:1 [
0 => array:6 [
"id" => 1
"first_name" => "John"
"last_name" => "Doe"
"email" => "doctor@doctor.com"
"created_at" => "2020-10-23T00:53:13.000000Z"
"updated_at" => "2020-10-23T00:53:13.000000Z"
]
]
]
解决方案
只需验证两次!:)
您可以首先验证所有不需要您知道员工 ID 的东西。像这样:
<?php
$request->validate([
'agency.name' => 'required|string',
'agency.phone' => 'required|string|unique:agencies,phone,'.$agency->id,
// ...
'employees.*.first_name' => 'required|string',
'employees.*.last_name' => 'required|string',
'employees.*.email' => 'required'
]);
然后,您可以foreach
对员工 ID 进行循环,并构建您唯一的电子邮件规则。假设您将员工 ID 放在变量中,$ids
并且它们的排序方式与您的请求数据相同,您可以执行以下操作:
<?php
$uniqueEmailRules = [];
foreach($ids as $key => $id) {
$uniqueEmailRules['employees.' . $key . '.email'] = 'unique:employees,email,' . $id;
}
$request->validate($uniqueEmailRules);
推荐阅读
- php - 如何使用户名输入只接受 php 中的数字和字母?
- c# - 数据表中行之间的 C# 总和
- r - R中的Box Cox转换故障排除(需要使用for循环或应用)
- arrays - 数组中两个元素的最大和减去它们之间的距离
- ios - 使用自定义单元格从搜索中更新 tableView
- r - 根据列名、ID 号和其他数据框中的键值替换数据框中的值
- c - 如何使用 cJSON 在名称/值对中查找名称
- javascript - 如何在css和js中创建一个带有向鼠标指针旋转的字符串的球体?
- xpages - documentId 解析代码没有被执行 XPages
- python-3.x - 在大于 9 的整数之后 提供的绑定数量不正确。当前语句使用 1,并且提供了 2