Laravel 中插入和更新类别的唯一验证

Nik*_*aut 2 php laravel laravel-5 laravel-validation

我有一个项目的清单,相关的类别(表名是:items

--- id ------ category_id ----- name
--- 1 ------- 1 ---------------- aa  --> Valid
--- 2 ------- 1 ---------------- bb  --> Valid
--- 3 ------- 2 ---------------- aa  --> Valid
--- 4 ------- 2 ---------------- bb  --> Valid
--- 5 ------- 1 ---------------- aa  --> InValid because same name exist in same category
--- 6 ------- 2 ---------------- bb  --> InValid because same name exist in same category
Run Code Online (Sandbox Code Playgroud)

如在Laravel 文档中

唯一规则在这里不起作用,因为类别明智,它对name所有记录进行验证。

public function validateItems($requestAll){
    $id = isset($requestAll['id']) ? ','.$requestAll['id'].',id':'';
    $rules = [
        'name' => 'required|unique:items,name'.$id,
        'category' => 'required'
    ];
    return Validator::make($requestAll, $rules);
}
Run Code Online (Sandbox Code Playgroud)

如何验证具有相关类别的项目以在 Laravel 中插入和更新。

ale*_*jjj 6

我认为你需要类似的东西

'name' => Rule::unique('items')->where(function ($query) use ($categoryId) {
    return $query->where('category_id', $categoryId);
}),
Run Code Online (Sandbox Code Playgroud)

UPD:对于更新现有行:

'name' => Rule::unique('items')->ignore($existingRecordId)->where(function ($query) use ($categoryId) {
    return $query->where('category_id', $categoryId);
}),
Run Code Online (Sandbox Code Playgroud)