当前位置:首页 > CMS教程 > 其它CMS > 列表

Laravel中unique和exists验证规则的优化详解

发布:smiling 来源: PHP粉丝网  添加日期:2021-09-01 15:12:26 浏览: 评论:0 

这篇文章主要给大家介绍了关于Laravel中unique和exists验证规则的优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

前言

Laravel提供了多种方法来验证应用输入数据。默认情况下,Laravel的控制器基类使用ValidatesRequests trait,该trait提供了便利的方法通过各种功能强大的验证规则来验证输入的HTTP请求。

Laravel中通过ValidatesRequests这个trait来验证requests非常的方便,并且在BaseController类中它被自动的引入了。 exitsts()和unique()这两个规则非常的强大和便利。

它们在使用的过程中需要对数据库中已有的数据进行验证,通常它们会像下面这样来写:

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

上面这种写法的语法很难记,我们几乎每次使用时,都不得不去查询一下文档,但是从 Laravel 的5.3.18版本开始这两个验证规则都可以通过一个新的Rule类来简化。

我们现在可以使用下面这样的熟悉的链式语法来达到相同的效果:

  1. 'email' => [ 
  2.  'required'
  3.  Rule::exists('staff')->where(function ($query) { 
  4.  $query->where('account_id', 1); 
  5.  }), 
  6. ], 
  7.  
  8. 'email' => [ 
  9.  'required'
  10.  Rule::unique('users')->ignore($user->id)->where(function ($query) { 
  11.  $query->where('account_id', 1); 
  12.  }) 
  13. ], 

这两个验证规则还都支持下面的链式方法:

where

whereNot

whereNull

whereNotNull

unique验证规则除此之外还支持ignore方法,这样在验证的时候可以忽略特定的数据。

好消息是现在仍然完全支持旧的写法,并且新的写法实际上就是通过formatWheres方法在底层将它转换成了旧的写法:

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

Tags: Laravel unique exists

分享到: