我使用Laravel 8和唯一验证规则来确保记录保持唯一,我现在正试图扩展它,使其对每个用户都是唯一的,但当扩展功能并以数组形式使用规则时,它似乎不会验证用户ID,反而会违反完整性约束。
因此,我有一个名为brands
的表,该表包含两个有问题的列:brand
和user_id
,我需要确保在存储记录时,品牌相对于brand
列是唯一的,并且登录用户的ID是提出请求的ID,例如:
两个用户可以拥有相同的品牌,但一个用户不能拥有同一品牌的倍数。
$validator = Validator::make($request->all(), [
'brand' => [
'required',
'string',
Rule::unique('brands')->where(function ($query) {
return $query->where('user_id', Auth::id());
})
],
'url' => 'required|string',
'telephone' => 'required|string|min:11|max:11'
]);
我也试过:
'brand' => 'required|string|unique:brands,brand,user_id,' . Auth::id()
我错过了什么?
根据文档,您必须使用ignore()
函数:
Rule::unique('users')->ignore($user->id),
关于您的案例:
Rule::unique('brands')->ignore($user->id, 'user_id'),