我想验证数据库表pools
中的name
字段是唯一的。当我创建一个新的条目,这工作得很好:Laravel条件唯一性验证器不起作用
$rules = [
'name' => 'required|unique:pools'
];
然而,当我想更新现有记录,那么唯一性检查应该跳过正在更新的项目(如,显然,这个名字可能是不变)。所以我挖了一遍,发现这个选项:
$rules = [
'name' => 'required|unique:pools,id,1'
];
其中1是我正在更新的记录的ID。这似乎解决了这个问题,但后来我用不同的ID进行了测试(在这种情况下验证器应该返回一个错误),但它仍然允许添加一个具有相同name
的新记录。
例如,如果我做
$rules = [
'name' => 'required|unique:pools,id,4'
];
其中4是在DB完全不同的条目的ID(或甚至一个ID不存在的话),唯一性检查不工作并允许我制作尽可能多的重复记录。似乎在上面的规则中添加任何ID都会使验证程序忽略数据库中的所有匹配项,除了具有给定ID的匹配项外。
基本上,我有一个相似的问题之一,这个问题列出,除了回答不为我工作:一个解决方案
Laravel 4 Validation unique(database) ignore current
有人吗?
哈哈,那是快:) – Iamzozo
你是对的@lamzozo –
我明白了。真的很傻。我会接受2秒前的答案,因为它们都是相同的。 – jovan