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和MySql来与ODBC数据连接
Oct 09 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
Jul 29 PHP
基于xcache的配置与使用详解
Jun 18 PHP
php class类的用法详细总结
Oct 17 PHP
php根据某字段对多维数组进行排序的方法
Mar 07 PHP
PHP输出两个数字中间有多少个回文数的方法
Mar 23 PHP
thinkphp的dump函数无输出实例代码
Nov 15 PHP
使用PHPMailer发送邮件实例
Feb 15 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
Apr 30 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
Mar 28 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 PHP
PHP的new static和new self的区别与使用
Nov 27 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
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
2014/12/05 PHP
用js生产批量批处理执行命令
2008/07/28 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
javascript中使用正则表达式清理table样式的代码
2020/04/01 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
[01:29]2014DOTA2展望TI 剑指西雅图DK战队专访
2014/06/30 DOTA
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
selenium3+python3环境搭建教程图解
2018/12/07 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
Mac安装python3的方法步骤
2019/08/09 Python
Python中turtle库的使用实例
2019/09/09 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
Python scrapy爬取小说代码案例详解
2020/07/09 Python
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
汽车专业毕业生推荐信
2013/11/12 职场文书
电话销售经理岗位职责
2013/12/07 职场文书
《陋室铭》教学反思
2014/02/26 职场文书
法人授权委托书
2014/04/03 职场文书
大学社团活动总结
2014/04/26 职场文书
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
感恩节寄语2015
2015/03/24 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
python小程序之飘落的银杏
2021/04/17 Python
Python如何将list中的string转换为int
2022/07/15 Ruby