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编程中字符串处理的5个技巧小结
Nov 13 PHP
一道关于php变量引用的面试题
Aug 08 PHP
PHP Class&Object -- PHP 自排序二叉树的深入解析
Jun 25 PHP
php session的锁和并发
Jan 22 PHP
yii框架搜索分页modle写法
Dec 19 PHP
PHP编程计算日期间隔天数的方法
Apr 26 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 PHP
PHP实现15位身份证号转18位的方法分析
Oct 16 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 PHP
实例讲解PHP表单
Jun 10 PHP
如何用PHP websocket实现网页实时聊天
May 26 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获得用户使用的代理服务器ip即真实ip
2006/12/31 PHP
php max_execution_time执行时间问题
2011/07/17 PHP
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
jquery异步请求实例代码
2011/06/21 Javascript
js中的string.format函数代码
2020/08/11 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
js兼容火狐获取图片宽和高的方法
2015/05/21 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
js实现div色块碰撞
2020/01/16 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
[01:48]完美圣典齐天大圣至宝宣传片
2016/12/17 DOTA
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
Python下的twisted框架入门指引
2015/04/15 Python
python list排序的两种方法及实例讲解
2017/03/20 Python
python实现剪切功能
2019/01/23 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
中级会计职业生涯规划书
2014/03/01 职场文书
见习期自我鉴定范文
2014/03/19 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
师德师风培训感言
2015/08/03 职场文书
离婚财产分割协议书
2015/08/11 职场文书
python munch库的使用解析
2021/05/25 Python
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python