unique 验证规则后接 . Auth::id () 的作用是?
28

不明白
'name' => 'required|between:3,25|regex:/^[A-Za-z0-9\-\_]+$/|unique:users,name,' . Auth::id()
. Auth::id() 是什么作用,后面接了个点语法让我有点懵逼。

本帖已被设为精华帖!
本帖由系统于 7个月前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
Summer
最佳答案

每一个规则,是用 | 符号分开的:

'name' => 'required|between:3,25|regex:/^[A-Za-z0-9-_]+$/|unique:users,name,' . Auth::id()

以上分解下来,是以下规则;

  • required —— 必须输入;
  • between:3,25 —— 字符数在 3 ~ 25 范围内;
  • regex:/^[A-Za-z0-9-_]+$/ —— 正则表达式,过滤只允许字母大小写、数字、横杆和下划线;
  • unique:users,name,' . Auth::id() —— unique 数据库唯一,在 users 数据表里,字段为 name,Auth::id() 指示将此 ID 排除在外。

unique 的完整格式为:

unique:table,column,except,idColumn

完整意思为:

在 table 数据表里检查 column ,除了 idColumn 为 except 的数据。

except 一般在『更新』的表单验证里使用,假设你已经注册了 summer 用户,在更新 summer 用户的表单验证时,你要验证数据库里 summer 用户名是否是唯一的,因为你的数据库里已经有 summer 用户了,所以必须将 summer 用户排除,否则永远是验证不通过。

参考 文档

10个月前
讨论数量: 7
Summer

每一个规则,是用 | 符号分开的:

'name' => 'required|between:3,25|regex:/^[A-Za-z0-9-_]+$/|unique:users,name,' . Auth::id()

以上分解下来,是以下规则;

  • required —— 必须输入;
  • between:3,25 —— 字符数在 3 ~ 25 范围内;
  • regex:/^[A-Za-z0-9-_]+$/ —— 正则表达式,过滤只允许字母大小写、数字、横杆和下划线;
  • unique:users,name,' . Auth::id() —— unique 数据库唯一,在 users 数据表里,字段为 name,Auth::id() 指示将此 ID 排除在外。

unique 的完整格式为:

unique:table,column,except,idColumn

完整意思为:

在 table 数据表里检查 column ,除了 idColumn 为 except 的数据。

except 一般在『更新』的表单验证里使用,假设你已经注册了 summer 用户,在更新 summer 用户的表单验证时,你要验证数据库里 summer 用户名是否是唯一的,因为你的数据库里已经有 summer 用户了,所以必须将 summer 用户排除,否则永远是验证不通过。

参考 文档

10个月前

@shijf 建议你去通读一下 php 文档,太基础了

7个月前

@shijf 如果 Auth::id() 的值为1,name的验证规则为:

'name' => 'required|between:3,25|regex:/^[A-Za-z0-9-_]+$/|unique:users,name,1'

7个月前
shijf

@王成涛 欧克,明白了,我想通了,感谢

7个月前

emmmm,没想到好早以前提的问题这么火,看来我不是一个人。。

7个月前

可以理解为 unique 就是字段值在数据表中是唯一的( 表中不存在的 ), 所以要加个 except 排除掉;

与 注册用户的表单对比, 注册用户时 unique , 不需要用 except

4个月前

貌似 5.1的文档 写得比较清楚:

强迫 Unique 规则忽略指定 ID:

有时候,你希望在验证字段时对指定 ID 进行忽略。例如,在「更新个人资料」页面会包含用户名、邮箱等字段。这时你会想要验证更新的 e-mail 值是否为唯一的。如果用户仅更改了名称字段而不是 e-mail 字段,就不需要抛出验证错误,因为此用户已经是这个 e-mail 的拥有者了。假设用户提供的 e-mail 已经被其他用户使用,则需要抛出验证错误。若要用指定规则来忽略用户 ID,则应该把要发送的 ID 当作第三个参数:

'email' => 'unique:users,email_address,'.$user->id

如果你的数据表使用的主键名称不是 id,那么你可以在第四个参数中来指定它:

'email' => 'unique:users,email_address,'.$user->id.',user_id'

增加额外的 Where 语句:

你也可以指定更多的条件到「where」查询语句:

'email' => 'unique:users,email_address,NULL,id,account_id,1'

上述规则中,只有 account_id1 的数据列会被包含在 unique 规则的验证。

2个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!