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

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

Wayne
本帖已被设为精华帖!
本帖由系统于 5年前 自动加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
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 用户排除,否则永远是验证不通过。

参考 文档

6年前 评论
讨论数量: 9
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 用户排除,否则永远是验证不通过。

参考 文档

6年前 评论

貌似 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 规则的验证。

5年前 评论
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 用户排除,否则永远是验证不通过。

参考 文档

6年前 评论

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

5年前 评论

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

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

5年前 评论
shijf

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

5年前 评论

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

5年前 评论

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

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

5年前 评论

貌似 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 规则的验证。

5年前 评论

这里的唯一验证业务逻辑上有点问题,注册是邮箱唯一验证,修改用户个人信息是用户名唯一验证,但登录是使用邮箱进行登录的,应该改为邮箱唯一验证,取消这里的用户名唯一验证

3年前 评论

你们说的太复杂了. 简单一句, 就是做唯一判断的时候排除自身.

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!