仅在拥有的模型上验证unique()

时间:2018-11-08 08:15:19

标签: laravel validation relationship

假设我有一个用户模型和一个品牌模型,它们之间存在一对多的关系:

用户模型:

public function brands()
{
    return $this->hasMany(\App\Brand::class);
}

这意味着不同的用户可以拥有相同名称的不同品牌,而不会发生冲突。

现在,我想为创建品牌制定验证规则,但仅针对用户拥有的品牌,以这种方式,用户无法拥有两个具有相同名称的品牌。

我该怎么做?

谢谢!

3 个答案:

答案 0 :(得分:1)

如果要在模型/存储库部分中执行此操作,请简单运行

$exists = (bool)$user->brands()->where('name', '=', $newBrandName)->count();

如果$exists为真,则因为使用了该名称,您可以阻止他添加新品牌

如果要在验证器部分中执行此操作,请使用规则

'name' => Rule::unique('brands')->where(function ($query) {
    return $query->where('user_id', auth()->id());
})

小心隐藏的依赖关系。

答案 1 :(得分:0)

您可以执行以下操作:

public function rules()
{
    $user = \Auth::user(); // get the user

    return [
        'name' => [
            Rule::unique('brands')->where(function ($query) use ($user) {
                $query->where('user_id', $user->id);
            }),
        ],
    ];
}

答案 2 :(得分:0)

我在Laravel Document中找到的内容

Validator::make($data, [
    'name' => Rule::unique('brands')->where(function ($query) {
        return $query->where('user_id', $user_id);
    })
]);