Laravel 8 唯一验证规则不适用于 user_id
Laravel 8 unique validation rule doesn't work with user_id
我正在使用 Laravel 8 和 unique 验证规则来确保记录保持唯一性,我现在正在尝试扩展它以便它对每个用户也是唯一的,但是当扩展功能并以数组形式使用规则,它似乎没有验证用户 ID,而是给我违反了完整性约束。
所以我有一个名为 brands
的 table,这个 table 包含有问题的两列: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()
我错过了什么?
根据 documentation 你必须使用 ignore()
函数:
Rule::unique('users')->ignore($user->id),
关于你的情况:
Rule::unique('brands')->ignore($user->id, 'user_id'),
我正在使用 Laravel 8 和 unique 验证规则来确保记录保持唯一性,我现在正在尝试扩展它以便它对每个用户也是唯一的,但是当扩展功能并以数组形式使用规则,它似乎没有验证用户 ID,而是给我违反了完整性约束。
所以我有一个名为 brands
的 table,这个 table 包含有问题的两列: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()
我错过了什么?
根据 documentation 你必须使用 ignore()
函数:
Rule::unique('users')->ignore($user->id),
关于你的情况:
Rule::unique('brands')->ignore($user->id, 'user_id'),