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 相关文章推荐
复杂检索数据并分页显示的处理方法
Oct 09 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
Jul 03 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
Linux php 中文乱码的快速解决方法
May 13 PHP
PHP生成及获取JSON文件的方法
Aug 23 PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 PHP
详解PHP swoole process的使用方法
Aug 26 PHP
thinkphp5.1框架模板布局与模板继承用法分析
Jul 19 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
Oct 08 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Jan 22 PHP
PHP Web表单生成器案例分析
Jun 02 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中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
PHP框架性能测试报告
2016/05/08 PHP
JavaScript模板入门介绍
2012/09/26 Javascript
jquery实现图片按比例缩放示例
2014/07/01 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
Exception类的常用方法
2012/06/16 面试题
学生拾金不昧表扬信
2014/01/21 职场文书
信息学院毕业生自荐信范文
2014/03/04 职场文书
房屋继承公证书
2014/04/10 职场文书
导游个人求职信
2014/04/25 职场文书
活动宣传策划方案
2014/05/23 职场文书
计生工作先进事迹
2014/08/15 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
《春酒》教学反思
2016/02/22 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android