php - 每个用户的 Laravel 唯一验证
问题描述
我遇到了一个我认为很简单的问题,但这让我很困惑,我将不胜感激。
问题是我希望每个用户都能够创建广告,用户 1 可以有一个名为“测试广告”的广告,用户 2 可以有一个名为“测试广告”的广告现在发生的是用户只能有一个广告称为“测试广告”,但如果用户一创建了“测试广告”,则用户 2 无法创建,因为验证返回它已经存在,但该用户不存在。
这是我的验证码:
'ad_title' => 'unique:ads,ad_title,user_id|required|min:3|max:128,' . Auth::user()->id,
谢谢你的时间!
解决方案
您可以使用闭包函数来应用您的自定义验证要求。
尝试
[
'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
推荐阅读
- javascript - 我应该使用什么 HTTP 动词来向 API 发送数据并获得响应?
- php - 如何用jquery克隆一个带有td的tr
- javascript - 本地节点项目的全局安装是否只是创建返回项目的可执行链接?
- sum - 在 Fortran 中通过级数求和计算 pi
- java - 如何配置 spring-data-mongodb 以使用 2 个不同的 mongo 实例共享相同的文档模型
- scala - 如果 IntelliJ 中有 main ,为什么它不运行我的脚本
- git - 如何从我的原点创建相同的分支到上游?
- r - 为什么 YAML 中的 Rmarkdown Dynamic TITLE 不会出现在 pdf 文件中
- c - 如何在c中管理全局结构
- css - CSS 网格布局:标签在 IE 11 上不起作用