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