【问题标题】:Laravel Unique Validation for each user每个用户的 Laravel 唯一验证
【发布时间】:2021-03-08 21:31:22
【问题描述】:

我遇到了一个我认为很简单的问题,但它让我很困惑,我将不胜感激。

问题是我希望每个用户都能够制作广告,用户 1 可以有一个名为“测试广告”的广告,用户 2 可以有一个名为“测试广告”的广告现在发生的情况是用户只能有一个名为“测试广告”的广告,但如果用户 1 已创建“测试广告”,则用户 2 无法创建,因为验证返回它已经存在,但该用户不存在。

这是我的验证码:

 'ad_title' => 'unique:ads,ad_title,user_id|required|min:3|max:128,' . Auth::user()->id,

感谢您的宝贵时间!

【问题讨论】:

  • 你可以在这里找到答案:stackoverflow.com/questions/36574583/…
  • 我发现了同样的情况,但很好奇这是否仍然是最好的方法,因为这篇文章是针对 5.2 的,我目前正在运行 Laravel 8。只是想确保我使用的是最好的方法新版本的 Laravel

标签: php laravel


【解决方案1】:

您可以使用闭包函数来应用您的自定义验证要求。

试试

[
    'ad_title' => [
        'required',
        'min:3',
        'max:128',
        function ($attribute, $value, $fail) {
            return !! (\DB::table('ads')
                ->where('user_id', auth()->id())
                ->get()
                ->contains('ad_title', $value);
            );
        },
]

然而,这个验证的逻辑可能在多个地方都需要,那么最好定义一个自定义规则类https://laravel.com/docs/8.x/validation#using-rule-objects

【讨论】:

  • 谢谢 Donkarnash,这对我有用,我将使用这么多地方,所以我将继续定义一个自定义规则类以避免尝试跨大量文件进行管理。
猜你喜欢
  • 2017-11-02
  • 2014-10-12
  • 2019-09-17
  • 2019-05-08
  • 2018-01-07
  • 2018-07-29
  • 1970-01-01
  • 2014-10-16
  • 2017-10-11
相关资源
最近更新 更多