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 相关文章推荐
PHP二维数组的去重问题解析
Jul 17 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
PHP中::、->、self、$this几种操作符的区别介绍
Apr 24 PHP
thinkphp中memcache的用法实例
Nov 29 PHP
php+mysql查询优化简单实例
Jan 13 PHP
PHP 微信支付类 demo
Nov 30 PHP
在WordPress中使用wp-cron插件来设置定时任务
Dec 10 PHP
PHP手机短信验证码实现流程详解
May 17 PHP
PHP排序二叉树基本功能实现方法示例
May 26 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
PHP PDOStatement::setAttribute讲解
Feb 01 PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 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来处理多个提交任务
2006/10/09 PHP
PHP 存储文本换行实现方法
2010/01/05 PHP
php ftp文件上传函数(基础版)
2010/06/03 PHP
php中socket通信机制实例详解
2015/01/03 PHP
PHP最常用的正则表达式
2017/02/13 PHP
php实现session共享的实例方法
2019/09/19 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
基于jquery的动态创建表格的插件
2011/04/05 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
关于jQuery的inArray 方法介绍
2011/10/08 Javascript
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
js中new一个对象的过程
2017/02/20 Javascript
Vue.js组件间的循环引用方法示例
2017/12/27 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
iview实现图片上传功能
2020/06/29 Javascript
python函数装饰器用法实例详解
2015/06/04 Python
python中正则表达式与模式匹配
2019/05/07 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物
彪马法国官网:PUMA法国
2019/12/15 全球购物
计算机毕业大学生推荐信
2013/12/01 职场文书
大家检讨书5000字
2014/02/03 职场文书
免职证明样本
2014/10/23 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
财务经理岗位职责
2015/01/31 职场文书
财务总监岗位职责范本
2015/04/03 职场文书