溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Laravel中怎么優(yōu)化unique和exists驗(yàn)證規(guī)則

發(fā)布時(shí)間:2021-07-19 14:41:27 來(lái)源:億速云 閱讀:118 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

Laravel中怎么優(yōu)化unique和exists驗(yàn)證規(guī)則,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

Laravel中通過(guò)ValidatesRequests這個(gè)trait來(lái)驗(yàn)證requests非常的方便,并且在BaseController類中它被自動(dòng)的引入了。 exitsts()和unique()這兩個(gè)規(guī)則非常的強(qiáng)大和便利。

它們?cè)谑褂玫倪^(guò)程中需要對(duì)數(shù)據(jù)庫(kù)中已有的數(shù)據(jù)進(jìn)行驗(yàn)證,通常它們會(huì)像下面這樣來(lái)寫:

// exists example
'email' => 'exists:staff,account_id,1'
// unique example
'email' => 'unique:users,email_address,$user->id,id,account_id,1'

上面這種寫法的語(yǔ)法很難記,我們幾乎每次使用時(shí),都不得不去查詢一下文檔。但是從 Laravel 的5.3.18版本開(kāi)始這兩個(gè)驗(yàn)證規(guī)則都可以通過(guò)一個(gè)新的Rule類來(lái)簡(jiǎn)化。

我們現(xiàn)在可以使用下面這樣的熟悉的鏈?zhǔn)秸Z(yǔ)法來(lái)達(dá)到相同的效果:

'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);
 })
],

這兩個(gè)驗(yàn)證規(guī)則還都支持下面的鏈?zhǔn)椒椒ǎ?/p>

  • where

  • whereNot

  • whereNull

  • whereNotNull

unique驗(yàn)證規(guī)則除此之外還支持ignore方法,這樣在驗(yàn)證的時(shí)候可以忽略特定的數(shù)據(jù)。

好消息是現(xiàn)在仍然完全支持舊的寫法,并且新的寫法實(shí)際上就是通過(guò)formatWheres方法在底層將它轉(zhuǎn)換成了舊的寫法:

protected function formatWheres()
{
 return collect($this->wheres)->map(function ($where) {
 return $where['column'].','.$where['value'];
 })->implode(',');
}

看完上述內(nèi)容,你們掌握Laravel中怎么優(yōu)化unique和exists驗(yàn)證規(guī)則的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI