【问题标题】:Laravel 8 unique validation rule doesn't work with user_idLaravel 8 唯一验证规则不适用于 user_id
【发布时间】:2022-01-09 16:57:14
【问题描述】:

我正在使用 Laravel 8 和 unique 验证规则来确保记录保持唯一性,我现在正在尝试扩展它,以便它对每个用户也是唯一的,但是在扩展功能和使用规则时在数组形式中,它似乎没有验证用户 ID,而是给我一个完整性约束违规。

所以我有一个名为brands 的表,并且该表包含有问题的两列:branduser_id,我需要确保在存储记录时,品牌对于brand 列是唯一的并且登录用户的 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()

我错过了什么?

【问题讨论】:

  • 如果我错了,请纠正我,但我认为应该是 Auth::user->id()。只是猜测。

标签: php laravel validation


【解决方案1】:

根据documentation你必须使用ignore()函数:

Rule::unique('users')->ignore($user->id),

关于你的情况:

Rule::unique('brands')->ignore($user->id, 'user_id'),

【讨论】:

  • 使用它不会触发$validator->fails(),所以用户最终只会看到“出了问题”作为后备,我怎样才能让它与验证器失败一起工作,所以我可以显示一个错误
  • 肯定Rule::unique() 会像unique:brands 一样返回开箱即用的验证消息,除非我弄错了?
猜你喜欢
  • 2015-02-27
  • 2021-07-19
  • 2022-12-17
  • 2021-11-23
  • 2016-08-03
  • 2018-05-24
  • 1970-01-01
  • 2015-10-20
  • 2020-03-25
相关资源
最近更新 更多