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类
Nov 27 PHP
Ajax PHP分页演示
Jan 02 PHP
php xml实例 留言本
Mar 20 PHP
PHP array_flip() 删除重复数组元素专用函数
May 16 PHP
探讨php define()函数及defined()函数使用详解
Jun 09 PHP
php+js实现图片的上传、裁剪、预览、提交示例
Aug 27 PHP
PHP基于文件存储实现缓存的方法
Jul 20 PHP
PHP身份证校验码计算方法
Aug 10 PHP
PHP实现递归目录的5种方法
Oct 27 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
解决Laravel5.5下的toArray问题
Oct 15 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函数常用用法小结
2010/02/08 PHP
php使用str_shuffle()函数生成随机字符串的方法分析
2017/02/17 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
基于jquery的商品展示放大镜
2010/08/07 Javascript
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
2013/11/28 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
使用jQuery仿苹果官网焦点图特效
2014/12/23 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
js实现分割上传大文件
2016/03/09 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
2016/12/14 Javascript
node学习记录之搭建web服务器教程
2017/02/16 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
浅谈angularjs中响应回车事件
2017/04/24 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
vue iview组件表格 render函数的使用方法详解
2018/03/15 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
2020/11/03 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
十个Python程序员易犯的错误
2015/12/15 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
python爬虫豆瓣网的模拟登录实现
2019/08/21 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
工作自荐信
2013/12/11 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
军训新闻稿范文
2015/07/17 职场文书
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python