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环境――Appserv
Dec 13 PHP
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
PHP 用数组降低程序的时间复杂度
Dec 04 PHP
php中3种方法统计字符串中每种字符的个数并排序
Aug 27 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
php网站被挂木马后的修复方法总结
Nov 06 PHP
PHP抓取网页、解析HTML常用的方法总结
Jul 01 PHP
php如何获取文件的扩展名
Oct 28 PHP
配置Nginx+PHP的正确思路与过程
May 10 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
PHP实现链式操作的三种方法详解
Nov 16 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 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
Protoss热键控制
2020/03/14 星际争霸
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
js简单判断flash是否加载完成的方法
2016/06/21 Javascript
浅谈jQuery hover(over, out)事件函数
2016/12/03 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
bootstrap multiselect 多选功能实现方法
2017/06/05 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
JS代码优化的8点建议
2020/02/04 Javascript
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
Python爬取国外天气预报网站的方法
2015/07/10 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
matplotlib 对坐标的控制,加图例注释的操作
2020/04/17 Python
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
幼儿园教研活动总结
2014/04/30 职场文书
安全承诺书格式范本
2015/04/28 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
详解python字符串驻留技术
2021/05/21 Python
以下牛机,你有几个
2022/04/05 无线电
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技
关于mysql中string和number的转换问题
2022/06/14 MySQL
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers