Laravel在需要忽略多行的更新方法中验证数组

Cod*_*ode 5 php laravel

我正在尝试验证update方法中的数组,这意味着我需要忽略id行的,以便它不会返回错误:

contactName已被占用

这是我通过控制器的更新方法进行的验证:

public function update($id, Request $request)
{
    $brand = Brand::findOrFail($id);

    $request->validate([
        'name' => ['required', 'string', 'max:255', Rule::unique('brands')->ignore($id)],
        'contactNames' => ['required', 'array'],
        'contactNames.*' => ['required', 'max:255', 'string', 'distinct', Rule::unique('brand_managers', 'name')->ignore( //what goes here? )],
        'emails' => ['required', 'array'],
        'emails.*' => ['required', 'max:255', 'email', 'distinct', Rule::unique('brand_managers', 'email')->ignore( //what goes here? )],
        'contactNumbers' => ['array'],
        'contactNumbers.*' => ['numeric'],
        'groupCheckbox' => ['required', 'min:1'],
    ]);
}
Run Code Online (Sandbox Code Playgroud)

通过对“名称”的唯一验证规则,我可以忽略$id使用路由模型绑定所附带的ID,但是对于contactNames和contactEmails,则需要检查具有manyToMany关系的表-如何忽略ID的brand_manager行进行多次验证检查?

我将尝试编辑我的问题以使其更加清晰

谢谢!

San*_*sol 6

您可以根据需要轻松地动态创建验证规则。

这是我当前项目中的示例,该示例需要除self外的唯一字段。

use Illuminate\Validation\Rule;

$unique_check = Rule::unique('brand_managers', 'email'); // table with some unique rows

//if you need ignore multiple rows/multiple conditions
$unique_check->where(function ($query) use ($brand) {
    return $query->whereNotIn('id', $brand->brand_managers->pluck('id')->toArray());
});

$request->validate([
    'emails.*' => [ // promocode unique string column
        'required',
        $unique_check
    ],
]);
Run Code Online (Sandbox Code Playgroud)