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表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
Aug 22 PHP
通过PHP修改Linux或Unix口令的方法分享
Jan 30 PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
May 15 PHP
ThinkPHP权限认证Auth实例详解
Jul 22 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
Sep 16 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
php实现的简单多进程服务器类完整示例
Feb 01 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 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.ini中文版(2)
2006/10/09 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
php中mysql模块部分功能的简单封装
2011/09/30 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
原生javascript实现匀速运动动画效果
2016/02/26 Javascript
Bootstrap轮播图的使用和理解4
2016/12/14 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
微信小程序如何获取群聊的openGid以及名称详解
2019/07/17 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
深入理解webpack process.env.NODE_ENV配置
2020/02/23 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
python服务器端收发请求的实现代码
2014/09/29 Python
python 第三方库的安装及pip的使用详解
2017/05/11 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
c++工程师面试问题
2013/08/04 面试题
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
理工类毕业自我鉴定
2014/02/20 职场文书
《莫高窟》教学反思
2014/02/25 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
网站出售协议书范文
2014/10/10 职场文书
公司员工管理制度
2015/08/04 职场文书
《好妈妈胜过好老师》:每个孩子的优秀都是有源头的
2020/01/03 职场文书
MySQL数据库如何给表设置约束详解
2022/03/13 MySQL