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 相关文章推荐
PHP4 与 MySQL 数据库操作函数详解
Oct 09 PHP
PHP PDO函数库详解
Apr 27 PHP
php下正则来匹配dede模板标签的代码
Aug 21 PHP
php中神奇的fastcgi_finish_request
May 02 PHP
php接口与接口引用的深入解析
Aug 09 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
Aug 16 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
Dec 02 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
基于swoole实现多人聊天室
Jun 14 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
Aug 05 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 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
PHP中的加密功能
2006/10/09 PHP
php页面消耗内存过大的处理办法
2013/03/18 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
PHP_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
YII模块实现绑定二级域名的方法
2014/07/09 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
实用的Vue开发技巧
2019/05/30 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
Numpy数组转置的两种实现方法
2018/04/17 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
对python调用RPC接口的实例详解
2019/01/03 Python
python sqlite的Row对象操作示例
2019/09/11 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
程序员求职信
2014/04/16 职场文书
小学班级特色活动方案
2014/08/31 职场文书
个人自荐书怎么写
2015/03/26 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书