Laravel条件唯一性验证器不起作用

时间:2015-10-20 11:14:05

标签: php validation laravel laravel-4

我想验证数据库表name中的pools字段是唯一的。当我创建一个新条目时,这很好用:

$rules = [
    'name' => 'required|unique:pools'
];

但是,当我想更新现有记录时,唯一性检查应跳过正在更新的项目(显然,名称可以保持不变)。所以我挖了一下这个选项:

$rules = [
    'name' => 'required|unique:pools,id,1'
];

其中1是我更新的记录的ID。这似乎解决了这个问题,但后来我测试了一个不同的ID(在这种情况下验证器应该返回错误),但它仍然允许添加具有相同name的新记录。

例如,如果我这样做

$rules = [
    'name' => 'required|unique:pools,id,4'
];

其中4是数据库中完全不同的条目的ID(或者甚至根本不存在的ID),唯一性检查不起作用,并允许我制作尽可能多的重复记录我想要的。似乎在上述规则中添加任何ID都会使验证程序忽略数据库中的所有匹配,只有具有给定ID的匹配。

基本上,我遇到了与本问题中提出的问题类似的问题,除了答案对我不起作用:

Laravel 4 Validation unique(database) ignore current

有解决方案的人吗?

2 个答案:

答案 0 :(得分:1)

你犯了一个愚蠢的错误,试试这个

$rules = [
'name' => 'required|unique:pools,name,4'
];

答案 1 :(得分:1)

第二个参数是字段,您要查找的是唯一的。更改ID,命名。第三个参数是id,查找必须跳过。

$rules = [
   'name' => 'required|unique:pools,mame,4'
];