在Laravel 5.8中对多个字段进行唯一验证

时间:2019-09-16 08:00:21

标签: laravel

我想对多个字段进行“唯一”验证。我已经写了以下验证规则,但不确定如何在其中包含brand_id和company_id

$request->validate([
            'name' => 'required|string|unique:products',
            'company_id' => 'required',
            'brand_id' => 'required',
 ]);

所以我想做的是添加产品,但是请检查名称对于给定的company_id和brand_id是否唯一。我该怎么办?

3 个答案:

答案 0 :(得分:1)

我们可以使用Rule::unique()函数将自定义条件添加到唯一验证中。

$request->validate([
    'company_id' => 'required',
    'brand_id' => 'required',
    'name' => [
        'required',
        'string',
        Rule::unique('products')->where(function($query) {
            $query->where('company_id', request('company_id'));
            $query->where('brand_id', request('brand_id'));
        }),
    ],
 ]);

答案 1 :(得分:0)

有时,您可能希望在第一次验证失败后停止对属性运行验证规则。为此,请将保释规则分配给属性:

$request->validate([
    'name'          => 'bail|required|string|unique:products',
    'company_id'    => 'bail|required',
    'brand_id'      => 'required',
]);

答案 2 :(得分:0)

您可以在忽略选项(下面的NULL,id)之后添加其他 $request->validate([ 'company_id' => 'required', 'brand_id' => 'required', 'name' => 'required|string|unique:products,name,NULL,id,company_id,'.request('company_id').',brand_id,'.request('brand_id'), ' ]); ,例如:

{{1}}