【发布时间】:2020-10-24 17:33:26
【问题描述】:
'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 作为数组?
-
我更新了你可以从我的表单@sta 看到传入数据的问题
-
试试这个
'employees.*.email' =>['required', Rule::unique( 'employees')->ignore( 'employees.*.id') ], -
这也可以工作
'employees.*.email' => 'required|unique:employees,email,' . 'employees.*.id', -
@sta 你永远不应该将用户数据传递给忽略,这将使它容易受到 SQL 注入攻击。
标签: laravel