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之数据库操作详解及乱码解决!
Jan 02 PHP
php 全局变量范围分析
Aug 07 PHP
php max_execution_time执行时间问题
Jul 17 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 PHP
使用XHGui来测试PHP性能的教程
Jul 03 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
PHP实现文件上传与下载实例与总结
Mar 13 PHP
thinkphp验证码的实现(form、ajax实现验证)
Jul 28 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
Django 标签筛选的实现代码(一对多、多对多)
Sep 05 PHP
Laravel 5.5 异常处理 & 错误日志的解决
Oct 17 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
解析PHP中$_FILES的使用以及注意事项
2013/07/05 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
js代码实现随机颜色的小方块
2015/07/30 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
微信小程序控制台提示warning:Now you can provide attr "wx:key" for a "wx:for" to improve performance解决方法
2019/02/21 Javascript
简单了解node npm cnpm的具体使用方法
2019/02/27 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
[02:47]2018年度DOTA2最佳辅助位选手4号位-完美盛典
2018/12/17 DOTA
使用PYTHON创建XML文档
2012/03/01 Python
python清除字符串里非数字字符的方法
2015/07/02 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
Python读写文件基础知识点
2019/06/10 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
Django中多种重定向方法使用详解
2019/07/17 Python
python pycharm的安装及其使用
2019/10/11 Python
python爬虫实现获取下一页代码
2020/03/13 Python
Python 列表反转显示的四种方法
2020/11/16 Python
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
小学生自我鉴定
2013/10/12 职场文书
全神贯注教学反思
2014/02/03 职场文书
车辆工程专业求职信
2014/04/28 职场文书
质量承诺书格式范文
2015/04/28 职场文书
社区干部培训心得体会
2016/01/06 职场文书
《揠苗助长》教学反思
2016/02/20 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
Go语言基础map用法及示例详解
2021/11/17 Golang