我想验证数据库表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
有解决方案的人吗?
答案 0 :(得分:1)
你犯了一个愚蠢的错误,试试这个
$rules = [
'name' => 'required|unique:pools,name,4'
];
答案 1 :(得分:1)
第二个参数是字段,您要查找的是唯一的。更改ID,命名。第三个参数是id,查找必须跳过。
$rules = [
'name' => 'required|unique:pools,mame,4'
];