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 相关文章推荐
ajax+php打造进度条 readyState各状态
Mar 20 PHP
php debug 安装技巧
Apr 30 PHP
用PHP实现的四则运算表达式计算实现代码
Aug 02 PHP
解析PHP中一些可能会被忽略的问题
Jun 21 PHP
php数组去重实例及分析
Nov 26 PHP
php导出excel格式数据问题
Mar 11 PHP
php函数serialize()与unserialize()用法实例
Nov 06 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
Dec 17 PHP
百万级别知乎用户数据抓取与分析之PHP开发
Sep 28 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
Mar 21 PHP
php文件上传 你真的掌握了吗
Nov 28 PHP
php获取数据库中数据的实现方法
Jun 01 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/10/09 PHP
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
php操作mysqli(示例代码)
2013/10/28 PHP
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
奇妙的js
2007/09/24 Javascript
JS array 数组详解
2009/03/22 Javascript
JQuery中的ready函数冲突的解决方法
2010/05/17 Javascript
ExtJs的Date格式字符代码
2010/12/30 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
jQuery的ajax下载blob文件
2016/07/21 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
2017/01/13 Javascript
Echarts基本用法_动力节点Java学院整理
2017/08/11 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
python保存文件方法小结
2018/07/27 Python
selenium+python实现自动化登录的方法
2018/09/04 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
2014年银行信贷员工作总结
2014/12/08 职场文书
元宵节寄语大全
2015/02/27 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery