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 相关文章推荐
COM in PHP (winows only)
Oct 09 PHP
dedecms 制作模板中使用的全局标记图文教程
Mar 11 PHP
一步一步学习PHP(4) php 函数 补充2
Feb 15 PHP
PHP 反向排序和随机排序代码
Jun 30 PHP
利用php下载xls文件(自己动手写的)
Apr 18 PHP
php有道翻译api调用方法实例
Dec 22 PHP
php之static静态属性与静态方法实例分析
Jul 30 PHP
[原创]php实现子字符串位置相互对调互换的方法
Jun 02 PHP
Zend Framework上传文件重命名的实现方法
Nov 25 PHP
PHP 获取 ping 时间的实现方法
Sep 29 PHP
PHP调用接口用post方法传送json数据的实例
May 31 PHP
浅析PHP echo 和 print 语句
Jun 30 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&mysql(三)
2006/10/09 PHP
用PHP动态生成虚拟现实VRML网页
2006/10/09 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
Laravel中任务调度console使用方法小结
2017/05/07 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
自动更新作用
2006/10/08 Javascript
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
使用JavaScript开发IE浏览器本地插件实例
2015/02/18 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
2016/08/15 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
实例Python处理XML文件的方法
2015/08/31 Python
Python实现多进程共享数据的方法分析
2017/12/04 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
入党自我鉴定
2014/03/25 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
争先创优活动总结
2014/08/27 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
毕业论文致谢部分怎么写
2015/05/14 职场文书
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技