假设我有一个用户模型和一个品牌模型,它们之间存在一对多的关系:
用户模型:
public function brands()
{
return $this->hasMany(\App\Brand::class);
}
这意味着不同的用户可以拥有相同名称的不同品牌,而不会发生冲突。
现在,我想为创建品牌制定验证规则,但仅针对用户拥有的品牌,以这种方式,用户无法拥有两个具有相同名称的品牌。
我该怎么做?
谢谢!
答案 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);
})
]);