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 日志缩略名的创建函数代码
May 26 PHP
PHP访问MYSQL数据库封装类(附函数说明)
Dec 04 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
PHP 自定义错误处理函数的使用详解
May 10 PHP
php 不使用js实现页面跳转
Feb 11 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
Nov 04 PHP
PHP可变函数学习小结
Nov 29 PHP
CI框架简单邮件发送类实例
May 18 PHP
php判断是否为ajax请求的方法
Nov 29 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
PHP手机短信验证码实现流程详解
May 17 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
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
使用PHP开发留言板功能
2019/11/19 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
JavaScript实现带标题的图片轮播特效
2015/05/20 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
js常见遍历操作小结
2019/06/06 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
Python基于pandas实现json格式转换成dataframe的方法
2018/06/22 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
python多线程抽象编程模型详解
2019/03/20 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
新媒传信软件测试面试题
2013/02/24 面试题
前台文员岗位职责及工作流程
2013/11/19 职场文书
运动会广播稿200米
2014/01/27 职场文书
法律七进实施方案
2014/03/15 职场文书
九九重阳节标语
2014/10/07 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python
如何用JavaScipt测网速
2021/05/09 Javascript
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫