2016-08-26 83 views
0

我一直在試圖找出這個問題,並且從這裏和Laracast處理過每一個帖子,但是都是這樣。Laravel 5.2獨特的驗證總是在更新時失效

我已經完成了這個工作,它的工作,但我不知道爲什麼它不現在。

,基本建立在你的形式請求的規則應遵循以下格式:

<?php 

class MyFormRequest extends Request{ 
    public function rules(){ 
     return [ 
     'field' => 'required|unique:table_name:field,' . $this->input('field'); 
     ]; 
    } 
    } 

這對我來說應該工作,但根據我目前的經驗沒有。我試圖通過檢查傳入的請求方法來分離規則,並根據請求是更新還是創建來分配規則。

我不應該滿足這個要求嗎?重新使用我的FormRequest的最好方法是什麼,但確保我能夠驗證儘可能多的表字段的唯一性,而不管它們的數據類型如何,因爲我感覺到這可能與Laravel看起來有關要在正在驗證的字段上進行聚合,並且如果它不是整數,則它將繼續顯示錯誤消息。

解決這個問題的另一種可能的方法是如果我對我有興趣驗證的字段實現自己的驗證方法。我會如何去做這件事?

回答

0

這條規則的作品只有「表格名」的主鍵爲「ID」,但如果它是不同的,那麼你必須把它寫成了第四個參數獨特的規則如下:

<?php 
class MyFormRequest extends Request{ 
    public function rules(){ 
    return [ 
     'field' => 'required|unique:table_name:field,' . $this->input('field').','.'primary_key_field'; 
    ]; 
    } 
} 

希望幫你 !!!

+0

嗨伊斯蘭教我已經做了有什麼建議樓上,但它給了我下面的錯誤:SQLSTATE [42S02]:基表或視圖未找到:1146表「theonesystem.company_groups:代碼」不存在( SQL:select count(*)as'company_groups:code'中的集合,其中'TEST VALUEL' =「TEST VALUE」和'id' <> id) – Maximum86

+0

似乎這個規則不適用於除整數之外的其他字段類型以及那些你可以實際聚合的東西。如果我錯了,請告訴我 – Maximum86

+0

不,我不這麼認爲。因爲這裏的問題是在數據庫中找不到表名,所以請確保該表與您現在正在連接的數據庫處於同一個數據庫中,並通過從該表中獲取修補程序或其他內容中的任何數據來對其進行測試。 –

0

您需要告訴驗證程序從重複搜索中排除哪些行。 如果你的主鍵是id,你需要通過它的價值:

'field' => 'required|unique:table_name,field,' . $this->input('id') 

您的代碼也有一些其他的錯誤:在更新時

'field' => 'required|unique:table_name:field,' . $this->input('field'); 
            ^       ^
0

規則「獨特」的需要aditional的論點。那些有爭議的論據將負責忽略你正在工作的實際註冊表。如果未應用,則此規則將始終無效,因爲註冊表始終會在數據庫中找到。

你的第三個參數應該是你想忽略的ID。 (你正在傳遞一個值...)

*另一件事:我從你的規則中挑選了一個錯誤類型。用新的參數檢查下面的sintax。 PS:如果您表中的ID列與「ID」名稱不同,則需要將此列名指定爲第四個參數。

'field' => 'required|unique:table_name,field,'.$this->input('id').',column_name'