本文是Laravel實戰:任務管理系統(一)的擴充套件閱讀
原文連結; 歡迎作客我們的php&Laravel學習群:109256050
Laravel中通過ValidatesRequests這個trait來驗證requests非常的方便,並且在BaseController類中它被自動的引入了。
exitsts()和unique()這兩個規則非常的強大和便利。它們在使用的過程中需要對資料庫中已有的資料進行驗證,通常它們會像下面這樣來寫:
// exists example
`email` => `exists:staff,account_id,1`
// unique example
`email` => `unique:users,email_address,$user->id,id,account_id,1`
複製程式碼
上面這種寫法的語法很難記,我們幾乎每次使用時,都不得不去查詢一下文件。但是從 Laravel 的5.3.18版本開始這兩個驗證規則都可以通過一個新的Rule類來簡化。
我們現在可以使用下面這樣的熟悉的鏈式語法來達到相同的效果:
`email` => [
`required`,
Rule::exists(`staff`)->where(function ($query) {
$query->where(`account_id`, 1);
}),
],
複製程式碼
`email` => [
`required`,
Rule::unique(`users`)->ignore($user->id)->where(function ($query) {
$query->where(`account_id`, 1);
})
],
複製程式碼
這兩個驗證規則還都支援下面的鏈式方法:
- where
- whereNot
- whereNull
- whereNotNull
unique驗證規則除此之外還支援ignore方法,這樣在驗證的時候可以忽略特定的資料。
好訊息是現在仍然完全支援舊的寫法,並且新的寫法實際上就是通過formatWheres方法在底層將它轉換成了舊的寫法:
protected function formatWheres()
{
return collect($this->wheres)->map(function ($where) {
return $where[`column`].`,`.$where[`value`];
})->implode(`,`);
}
複製程式碼