2015-10-20 69 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