【问题标题】:How to write Laravel validation for unique fields如何为唯一字段编写 Laravel 验证
【发布时间】:2015-05-15 01:29:53
【问题描述】:

我似乎找不到关于如何在 Laravel 中验证唯一字段的详尽指南。请详细说明以下验证规则之间的区别以及哪个是错误或多余的。

1

$rules = ['email' => 'email|unique:users']

2

$rules = ['email' => 'email|unique:users,email']

3

$rules = ['email' => "email|unique:users,email,{$user->email}"]

4

$rules = ['email' => "email|unique:users,email,{$user->email},email"]

【问题讨论】:

  • 注意:您的第三个和第四个示例将不起作用,因为$user->email 不会在单引号字符串中处理。 $rules = ['email' => "email|unique:users,email,{$user->email},email"] 会起作用。
  • 修复了这个问题。谢谢提醒!

标签: php validation laravel laravel-4


【解决方案1】:

第一个是简单地查看用户表以确保电子邮件是唯一的。因为您没有提供列作为第二个参数,所以它将假定列名与键相同,在本例中为 email

第二个是简单地声明应该检查哪一列的电子邮件列。在这种情况下,它不是必需的,因为电子邮件列是 Laravel 已经假定的 email。如果您在数据库中的电子邮件列被命名为 user_email,那么您必须将 user_email 传递给验证器,以便它知道要检查哪一列的电子邮件地址。

第三个,您应该使用该电子邮件传递用户的 ID。这将告诉 Laravel 该电子邮件应该是唯一的,除非该电子邮件恰好是为该 id 设置的。这对于编辑表单很有用。如果您正在编辑拥有电子邮件 test@test.com 的用户并且您尝试保存它,那么拥有唯一验证器将不允许保存该表单,因为它已经在表中看到 test@test.com(您正在尝试编辑的那个) )。因此,这样,您传入该用户的 id 并且验证将通过。

第四个,您只是简单地声明主 id 列的名称。大多数时候,这不是必需的,因为 Laravel 只是假设主键列称为 id。如果出于某种原因,您的用户表上的主键是 user_id,那么您将传入 user_id,以便它知道与 id 匹配的列。

【讨论】:

  • 谢谢,很全面!
猜你喜欢
  • 2019-03-24
  • 1970-01-01
  • 2020-08-20
  • 2017-10-30
  • 2023-04-09
  • 2019-11-11
  • 2018-04-28
  • 2020-08-02
相关资源
最近更新 更多