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


Posted in PHP onJanuary 28, 2018

前言

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

总结

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

PHP 相关文章推荐
php模拟socket一次连接,多次发送数据的实现代码
Jul 26 PHP
深入PHP中的HashTable结构详解
Jun 13 PHP
PHP 输出URL的快捷方式示例代码
Sep 22 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
Jul 08 PHP
PHPer 需要了解的 5 个 Composer 小技巧
Aug 18 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
Aug 19 PHP
ThinkPHP独立分组使用的注意事项
Nov 25 PHP
Laravel 5 学习笔记
Mar 06 PHP
学习php设计模式 php实现原型模式(prototype)
Dec 07 PHP
PHP实现的简单异常处理类示例
May 04 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
Apr 27 PHP
php 读取文件夹下所有图片、文件的实例
Oct 17 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
Jan 27 #PHP
PHP设计模式之注册树模式分析
Jan 26 #PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 #PHP
PHP CURL与java http使用方法详解
Jan 26 #PHP
php实现mysql连接池效果实现代码
Jan 25 #PHP
php使用imagecopymerge()函数创建半透明水印
Jan 25 #PHP
CI框架(CodeIgniter)操作redis的方法详解
Jan 25 #PHP
You might like
详解:――如何将图片储存在数据库里
2006/12/05 PHP
php HandlerSocket的使用
2011/05/02 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
2018/04/04 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
Node.js中的流(Stream)介绍
2015/03/30 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
koa-router源码学习小结
2018/09/07 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
python实现决策树ID3算法的示例代码
2018/05/30 Python
python多线程抽象编程模型详解
2019/03/20 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
如何使用Python抓取网页tag操作
2020/02/14 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
运动会稿件300字
2014/02/14 职场文书
百日安全活动总结
2014/05/04 职场文书
村委会贫困证明范本
2014/09/17 职场文书
实习单位证明范例
2014/11/17 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
Nginx安装配置详解
2022/06/25 Servers