2015-10-19 88 views
3

這是我在我的班規:Laravel 5獨特的形式驗證忽略ID /塞

class AppointmentsController extends Controller 
{ 
    protected $rules = [ 
     'appointment' => ['required', 'min:5'], 
     'slug'  => ['required', 'unique:appointments'], 
     'description' => ['required'], 
     'date'  => ['required', 'date_format:"Y-m-d H:i"'], 
    ]; 

這是laravel官方文檔:

有時,您可能希望忽略給定ID在獨特的檢查。 例如,考慮一個「更新配置文件」屏幕,其中包含用戶的姓名,電子郵件地址和位置 。當然,你會想要 驗證電子郵件地址是唯一的。但是,如果用戶只更改名稱字段而不更改電子郵件字段,則不希望發生 驗證錯誤,因爲用戶已經是電子郵件地址的所有者 。如果用戶提供的 用戶提供的電子郵件地址已被其他 用戶使用,則只需要輸入驗證錯誤。告訴獨特的規則,忽略了用戶的ID,您可以通過 的ID作爲第三個參數:

'email' => 'unique:users,email_address,'.$user->id.',user_id' 

我想在我的規則中使用此:

'slug'  => ['required', 'unique:appointments,id,:id'], 

這的確忽略了當前行,但它完全忽略它。我想要完成的是,我希望它只有在子彈不變時才忽略當前行。當它更改爲另一行中已經唯一的東西時,我希望它引發錯誤。

+1

試試這樣說:' '塞'=> [ '需要', '獨特:約會,蛞蝓,:ID']' –

+0

是的,我shoud've提到,我試過了,沒有運氣。我的猜測是,它應該像那樣工作,所以我需要弄清楚爲什麼它沒有。感謝您的評論:) – Hardist

+1

你爲什麼把這個在控制器?它應該放在一個自定義的請求類中,而不能用於控制器。不知道這是否導致問題。 – codegeek

回答

4

獨特的驗證程序的工作原理一樣,

unique:table,column,except,idColumn 

所以你的情況,你可以做這樣的:

獲取你想要驗證對ID,您可以從路線得到它或以任何其他方式適合你;類似的東西

$id = $this->route('id'); 

'slug'  => ['required','unique:appointments,slug,'.$id],