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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
PHP4中session登录页面的应用
Jul 25 PHP
.htaccess文件保护实例讲解
Feb 06 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
May 04 PHP
php中数据库连接方式pdo和mysqli对比分析
Feb 25 PHP
php实现网站顶踩功能的完整前端代码
Jul 19 PHP
php实现简单的MVC框架实例
Sep 23 PHP
ucenter中词语过滤原理分析
Jul 13 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
Feb 15 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
May 26 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
PHP实现笛卡尔积算法的实例讲解
Dec 22 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/12/14 PHP
PHP数组相关函数汇总
2015/03/24 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
2008/08/05 Javascript
js data日期初始化的5种方法
2013/12/29 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
JavaScript事件类型中UI事件详解
2016/01/14 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
2019/11/06 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
Django与遗留的数据库整合的方法指南
2015/07/24 Python
Python list操作用法总结
2015/11/10 Python
python3 读取Excel表格中的数据
2018/10/16 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
tensorflow 变长序列存储实例
2020/01/20 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
药学专业大专生的自我评价
2013/12/12 职场文书
工会主席岗位责任制
2014/02/11 职场文书
白岩松演讲
2014/05/21 职场文书
ktv好的活动方案
2014/08/15 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
小学英语复习计划
2015/01/19 职场文书
基层党支部承诺书
2015/04/30 职场文书
单位介绍信格式范文
2015/05/04 职场文书
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技