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实现文件上传二法
Oct 09 PHP
php curl常见错误:SSL错误、bool(false)
Dec 28 PHP
php对mongodb的扩展(初出茅庐)
Nov 11 PHP
php字符串分割函数explode的实例代码
Feb 07 PHP
PHP 自定义错误处理函数trigger_error()
Mar 26 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
Apr 22 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
Nov 20 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
Mar 31 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
Dec 21 PHP
提高Laravel应用性能方法详解
Jun 24 PHP
php给数组赋值的实例方法
Sep 26 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中读取和写入WORD文档的代码
2008/04/09 PHP
php xml 入门学习资料
2011/01/01 PHP
php生成扇形比例图实例
2013/11/06 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
js获取Get值的方法
2016/09/29 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
2018/08/13 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
一文快速详解前端框架 Vue 最强大的功能
2019/05/21 Javascript
pyside写ui界面入门示例
2014/01/22 Python
浅谈python迭代器
2017/11/08 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
Django Serializer HiddenField隐藏字段实例
2020/03/31 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
详解pandas赋值失败问题解决
2020/11/29 Python
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
性能服装:HYLETE
2018/08/14 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
支教自我鉴定
2014/01/18 职场文书
员工考核管理制度
2014/02/02 职场文书
防灾减灾标语
2014/10/07 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏