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 更新数据库中断的解决方法
Jun 05 PHP
ajax php 实现写入数据库
Sep 02 PHP
php学习之 认清变量的作用范围
Jan 26 PHP
php foreach 使用&(与运算符)引用赋值要注意的问题
Feb 16 PHP
关于session在PHP5的配置文件中的详细设置参数说明
Apr 20 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
深入PHP magic quotes的详解
Jun 17 PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 PHP
php5.5中类级别的常量使用介绍
Oct 02 PHP
PHP curl 抓取AJAX异步内容示例
Sep 09 PHP
实例讲解通过​PHP创建数据库
Jan 20 PHP
PHP 7.4 新语法之箭头函数实例详解
May 09 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的ajax框架xajax入门与试用介绍
2010/12/19 PHP
PHP游戏编程25个脚本代码
2011/02/08 PHP
PHP中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
PHP实现上传多图即时显示与即时删除的方法
2017/05/09 PHP
php strftime函数的详细用法
2018/06/21 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
Prototype Date对象 学习
2009/07/12 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
15款jQuery分布引导插件分享
2015/02/04 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
2017/06/28 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
js实现3D旋转相册
2020/08/02 Javascript
[59:26]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第二局
2016/02/28 DOTA
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
Python_LDA实现方法详解
2017/10/25 Python
python实现彩票系统
2020/06/28 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
Python图像处理库PIL的ImageFont模块使用介绍
2020/02/26 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
python中Mako库实例用法
2020/12/31 Python
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
2016/01/20 HTML / CSS
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
如何进行有效的自我评价
2013/09/27 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
小学班级特色活动方案
2014/08/31 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android