如何为唯一字段编写Laravel验证

时间:2015-03-12 18:22:10

标签: php validation laravel laravel-4

我似乎无法找到有关如何验证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"]

1 个答案:

答案 0 :(得分:3)

第一个是查看users表以确保电子邮件是唯一的。因为您没有提供列作为第二个参数,所以它将假设列名与键相同,在本例中为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匹配。