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

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

前言

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

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • YII2框架中添加自定义模块的方法实例分析

    YII2框架中添加自定义模块的方法实例分析

    这篇文章主要介绍了YII2框架中添加自定义模块的方法,结合实例形式分析了YII2添加自定义模块的原理、步骤、实现方法与操作注意事项,需要的朋友可以参考下
    2020-03-03
  • Laravel关联模型中过滤结果为空的结果集(has和with区别)

    Laravel关联模型中过滤结果为空的结果集(has和with区别)

    这篇文章主要介绍了Laravel关联模型中过滤结果为空的结果集(has和with区别),需要的朋友可以参考下
    2018-10-10
  • laravel配置Redis多个库的实现方法

    laravel配置Redis多个库的实现方法

    这篇文章主要介绍了laravel配置Redis多个库的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • PHP的openssl加密扩展使用小结(推荐)

    PHP的openssl加密扩展使用小结(推荐)

    下面小编就为大家带来一篇PHP的openssl加密扩展使用小结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • ThinkPHP中类的构造函数_construct()与_initialize()的区别详解

    ThinkPHP中类的构造函数_construct()与_initialize()的区别详解

    这篇文章主要介绍了ThinkPHP中类的构造函数_construct()与_initialize()的区别,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • CI框架中cookie的操作方法分析

    CI框架中cookie的操作方法分析

    这篇文章主要介绍了CI框架中cookie的操作方法,实例分析了CI框架操作cookie的三种常见方法,以及自定义扩展核心控制器类的实例加以分析说明,非常具有实用价值的技巧,需要的朋友可以参考下
    2014-12-12
  • Yii框架组件和事件行为管理详解

    Yii框架组件和事件行为管理详解

    这篇文章主要介绍了Yii框架组件和事件行为管理,详细分析了Yii框架组件管理与行为管理的原理与使用技巧,需要的朋友可以参考下
    2016-05-05
  • PHP长网址与短网址的实现方法

    PHP长网址与短网址的实现方法

    这篇文章主要介绍了PHP长网址与短网址的实现方法,需要的朋友可以参考下
    2017-10-10
  • PHP生成器简单实例

    PHP生成器简单实例

    这篇文章主要介绍了PHP生成器简单实例,本文讲解了range、xrange函数的基本使用实例,需要的朋友可以参考下
    2015-05-05
  • 配置Nginx+PHP的正确思路与过程

    配置Nginx+PHP的正确思路与过程

    如何正确配置 Nginx + PHP,值得大家思考的一个问题,下面小编就为大家分析配置Nginx+PHP的正确思路与过程,感兴趣的小伙伴们可以参考一下
    2016-05-05

最新评论