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

Laravel 仅在拥有的模型上验证unique(),laravel,validation,relationship,Laravel,Validation,Relationship,假设我有一个用户模型和一个品牌模型,它们之间有一对多的关系: 用户模型: public function brands() { return $this->hasMany(\App\Brand::class); } 这意味着不同的用户可以拥有相同名称的不同品牌,而不会产生冲突 现在,我想为创建品牌制定一个验证规则,但只针对用户拥有的品牌,这样用户就不可能拥有两个同名品牌 我该怎么做 谢谢 您可以这样做: public function rules() { $user =

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

用户模型:

public function brands()
{
    return $this->hasMany(\App\Brand::class);
}
这意味着不同的用户可以拥有相同名称的不同品牌,而不会产生冲突

现在,我想为创建品牌制定一个验证规则,但只针对用户拥有的品牌,这样用户就不可能拥有两个同名品牌

我该怎么做


谢谢

您可以这样做:

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);
            }),
        ],
    ];
}

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

$exists = (bool)$user->brands()->where('name', '=', $newBrandName)->count();
如果
$exists
为true,则您将阻止他添加新品牌,因为该名称已被使用

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

'name' => Rule::unique('brands')->where(function ($query) {
    return $query->where('user_id', auth()->id());
})
小心隐藏的依赖性。

我在


这正是我想要的。Thnks!
Validator::make($data, [
    'name' => Rule::unique('brands')->where(function ($query) {
        return $query->where('user_id', $user_id);
    })
]);