繁体   English   中英

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

[英]Laravel Validating An Array in Update Method With Multiple Rows Needing Ignoring

我正在尝试在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'],
    ]);
}

使用'name'上的唯一验证规则,我可以使用路由模型绑定忽略带有$id ,但是使用contactNames和contactEmails,这需要检查具有manyToMany关系的表 - 如何忽略id的用于多次验证检查的brand_manager行?

我会尝试编辑我的问题以便更清晰

谢谢!

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

以下是我当前项目的示例,该项目需要除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
    ],
]);
$request->validate([
    'name' => ['required', 'string', 'max:255', Rule::unique('brands')->ignore($id)],
    'contactNames' => ['required', 'array'],
    'contactNames.*' => ['required', 'max:255', 'string', 'distinct',.$brand->id, // ID of record which want to ignore 
    'emails' => ['required', 'array'],
    'emails.*' => ['required', 'max:255', 'email', 'distinct', .$brand->id, // ID of record which want to ignore
    'contactNumbers' => ['array'],
    'contactNumbers.*' => ['numeric'],
    'groupCheckbox' => ['required', 'min:1'],
]);`

传递id想要在更新记录时忽略。

更多信息请查看https://laravel.com/docs/5.7/validation

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM