2016-08-18 48 views
1

我想限制所需的:我的Laravel 5.2應用程序中的唯一驗證程序,以檢查我的'slug'列的唯一性,僅針對特定user_id的表結果。換句話說,子彈確實需要是獨一無二的,但僅限於每個用戶。我已經爲store()函數使用了以下代碼:Laravel 5.2 Validator:限制對特定用戶的唯一字段檢查

'slug' => 'required|unique:contents,slug,NULL,id,user_id,' . Auth::id() 

工作得很好。但是,我無法使update()函數的工作原理相同,因爲我無法讓驗證程序停止檢查當前正在更新的條目的結果。目前我正在使用的代碼是:

'slug' => 'required|unique:contents,slug,' . $content->slug . ',id,user_id,' . Auth::id() 

代碼不正確的看向我,但我試過幾個變種和他們沒有工作,我怎麼想。在我看來,我會認爲這會奏效:

'slug' => 'required|unique:contents,id,' . $content->id . ',user_id,' . Auth::id() 

但它沒有。有人知道我的問題在這裏嗎?任何指導將不勝感激。

+0

在代碼的第二位,你知道,你有'$內容 - > slug',而不是'$內容 - > id'?除了那個小錯誤之外,我希望第二個代碼可以工作 – Jonathon

+0

是的,我認爲第二行看起來不錯,第三行是'slug'=>'required | unique:contents,id' 。 $ content-> id。 ',id,user_id'。 Auth :: id()是我期望能夠工作的,但它沒有。它允許我將slug更新爲該用戶已有的一個。 – Boone

+0

最後一行代碼缺少',id',也許這就是爲什麼它不起作用。試試:''required | unique:contents,id,'。 $ content-> id。 ',id,user_id'。 Auth :: id()' – Jonathon

回答

6

如果不知道模型中的實際屬性名稱,很難給出正確答案。驗證支持下列參數

unique:{0},{1},{2},{3},{4},{5} 

其中:

{0} =表名稱被驗證

{1} =列名被驗證

{2}{0}行= Id值跳過驗證

{3} =主鍵列在{0}

{4} =額外的過濾列的名稱爲額外的過濾器列{0}

{5} =值

所以名字,似乎很明顯,我們的價值觀爲{0}{1}{2}{5}。我不確定您的問題信息{3}{4}的正確值是多少。如果我是採取一種猜測,我會寫的驗證規則是這樣的:

'slug' => 'required|unique:contents,slug,' . $content->id . ',id,user_id,' . Auth::id() 
+0

非常感謝驗證器參數定義。我沒有在任何地方見過,甚至沒有在Laravel網站上看到過。我現在明白了。再次感謝! – Boone