2015-10-20 66 views
0

我想验证数据库表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

有人吗?

回答

1

第二个参数是该领域,你正在寻找的是唯一的。将ID更改为名称。第三个参数是查找必须跳过的id。

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

你正在做一个愚蠢的错误,试试这个

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

哈哈,那是快:) – Iamzozo

+0

你是对的@lamzozo –

+0

我明白了。真的很傻。我会接受2秒前的答案,因为它们都是相同的。 – jovan