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 相关文章推荐
ftp类(myftp.php)
Oct 09 PHP
15种PHP Encoder的比较
Mar 06 PHP
PHP 输出缓存详解
Jun 20 PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 PHP
php自定义函数截取汉字长度
May 15 PHP
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
Aug 21 PHP
php实现获取文章内容第一张图片的方法
Nov 04 PHP
php在数组中查找指定值的方法
Mar 17 PHP
php需登录的文件上传管理系统
Mar 21 PHP
Yii2实现同时搜索多个字段的方法
Aug 10 PHP
PHP var关键字相关原理及使用实例解析
Jul 11 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 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模板之Phpbean的目录结构
2008/01/10 PHP
PHP 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
javascript 文本框水印/占位符(watermark/placeholder)实现方法
2012/01/15 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
jquery实现的分页显示功能示例
2019/08/23 jQuery
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
零基础写python爬虫之爬虫的定义及URL构成
2014/11/04 Python
Python3里的super()和__class__使用介绍
2015/04/23 Python
Python随机生成带特殊字符的密码
2016/03/02 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
2020/07/05 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
德国PC硬件网站:CASEKING
2016/10/20 全球购物
马来西亚最好的婴儿商店:Motherhood
2017/09/14 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
中学生在校期间的自我评价分享
2013/11/13 职场文书
毕业生就业自荐信
2013/12/04 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
派出所所长先进事迹
2014/05/19 职场文书
根叔历年演讲稿
2014/05/20 职场文书
庆祝儿童节标语
2014/10/09 职场文书
DIY胆机必读:各国电子管评价
2022/04/06 无线电