首页 > 解决方案 > 每个用户的 Laravel 唯一验证

问题描述

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

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

这是我的验证码:

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

谢谢你的时间!

标签: phplaravel

解决方案


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

尝试

[
    '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


推荐阅读