phalcon model在插入或更新时会自动验证非空字段的解决办法


Posted in PHP onDecember 29, 2016

对phalcom框架不了解的朋友可以点击了解下。

在使用phalcon的insert和update功能时,因为数据库所有的字段设置的都是NOT NULL,而phalcon的model在插入或更新之前会自动判断字段是否需要必填,因此导致有空字段时无法存入。

开始遇到这问题时,想到两种解决方法:

一、改数据库字段,把NOT NULL改为可以为空。

但该数据库还得去找DBA,而且为了性能,DBA要求一般没有特殊情况,字段必须是NOT NULL,所以该方案否决。

二、给可以为空的字段设置默认值。

想过各种默认值,觉得空格最符合,但是赋值空格后,数据库里存的也会是空格,像一些empty和==''等判断会失效,很可能会影响一些业务逻辑,想想,还是放弃该方案。

最后还是上网各种搜,phalcon的资料太少,百度根本搜不出来,最后转战google,功夫不负有心人,终于给我找到些蛛丝马迹,最后再根据蛛丝马迹找出来真正的解决方案。同样有两种,如下:

一、给可以为空的字段单独设置规则

public function skipValidation($skipers=[])
 {
  foreach ($skipers as $skiper) {
   if (empty($this->$skiper)) {
    $this->$skiper = new \Phalcon\Db\RawValue('""');
   }
  } 
 }

使用的时候:

public function beforeValidation()
{
  $this->skipValidation(['tag','source_url']);
}

这种方法可以完美解决问题,比较麻烦的是,需要设置每个可以为空的字段。

二、关闭phalcon对字段是否为空的判断

public function initialize(){
 $this->setup(
  array('notNullValidations'=>false)
 );
 }

该方法直接把底层判断字段是否为空的逻辑关闭了,可以一劳永逸的解决这个问题,缺点就是,自己前后台得做好必填字段的判断。

PHP 相关文章推荐
人大复印资料处理程序_查询篇
Oct 09 PHP
实用函数7
Nov 08 PHP
apache2.2.4+mysql5.0.77+php5.2.8安装精简
Apr 29 PHP
建站常用13种PHP开源CMS比较
Aug 23 PHP
php实现rc4加密算法代码
Apr 25 PHP
使用PHP获取当前url路径的函数以及服务器变量
Jun 29 PHP
微信扫描二维码登录网站代码示例
Dec 30 PHP
php使用pack处理二进制文件的方法
Jul 03 PHP
php中stdClass的用法分析
Feb 27 PHP
基于PHP给大家讲解防刷票的一些技巧
Nov 18 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
Nov 20 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 PHP
微信公众号模板消息群发php代码示例
Dec 29 #PHP
PHP实现截取中文字符串不出现?号的解决方法
Dec 29 #PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
Dec 29 #PHP
PHP实现的XML操作类【XML Library】
Dec 29 #PHP
php常用字符函数实例小结
Dec 29 #PHP
php常用正则函数实例小结
Dec 29 #PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 #PHP
You might like
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
javascript工具库代码
2012/03/29 Javascript
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
用js读、写、删除Cookie代码分享及详细注释说明
2014/06/05 Javascript
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
HTML5的表单(绝对特别强大的功能)使用示例
2013/06/20 HTML / CSS
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
招聘单位介绍信
2014/01/14 职场文书
社区网格化管理实施方案
2014/03/21 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
二手房购房意向书
2015/05/09 职场文书
工作简报怎么写
2015/07/21 职场文书
golang在GRPC中设置client的超时时间
2021/04/27 Golang
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers