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图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
Dec 02 PHP
php懒人函数 自动添加数据
Jun 28 PHP
CI框架中集成CKEditor编辑器的教程
Jun 09 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
Aug 06 PHP
destoon实现调用自增数字从1开始的方法
Aug 21 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
Nov 09 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Dec 14 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
php文件后缀不强制为.php的实操方法
Sep 18 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 htmlspecialchars加强版
2010/02/16 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
js变换显示图片的实例
2013/04/16 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
js使用递归解析xml
2014/12/12 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
几种经典排序算法的JS实现方法
2016/03/25 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
python自定义类并使用的方法
2015/05/07 Python
对pandas的层次索引与取值的新方法详解
2018/11/06 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
Django实现跨域请求过程详解
2019/07/25 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
python实现梯度下降和逻辑回归
2020/03/24 Python
浅谈python 调用open()打开文件时路径出错的原因
2020/06/05 Python
python语言中有算法吗
2020/06/16 Python
Python datetime 如何处理时区信息
2020/09/02 Python
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
大学生村官工作总结2015
2015/04/09 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
体育部部长竞选稿
2015/11/21 职场文书