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 header()函数使用说明
Jul 10 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
Jul 03 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
Mar 26 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
Jun 25 PHP
WordPress中is_singular()函数简介
Feb 05 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
Jul 09 PHP
浅谈PHP中foreach/in_array的使用
Nov 02 PHP
php如何执行非缓冲查询API
Jul 22 PHP
PHP加密技术的简单实现
Sep 04 PHP
Thinkphp整合微信支付功能
Dec 14 PHP
PHP序列化的四种实现方法与横向对比
Nov 29 PHP
PHP rsa加密解密算法原理解析
Dec 09 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的call_user_func传reference引发的思考
2010/07/23 PHP
php实现memcache缓存示例讲解
2013/12/04 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
jquery.cookie.js的介绍与使用方法
2017/02/09 Javascript
React简单介绍
2017/05/24 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
浅析Python中的序列化存储的方法
2015/04/28 Python
wxpython实现图书管理系统
2018/03/12 Python
Python3中的列表生成式、生成器与迭代器实例详解
2018/06/11 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
办公室内勤岗位职责范本
2013/12/09 职场文书
读群众路线心得体会
2014/03/07 职场文书
2014年人大工作总结
2014/12/10 职场文书
五年级上册复习计划
2015/01/19 职场文书
会议欢迎词范文
2015/01/27 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
房屋所有权证明
2015/06/19 职场文书
2015年女工委工作总结
2015/07/27 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
python 实现体质指数BMI计算
2021/05/26 Python
JavaScript的function函数详细介绍
2021/11/20 Javascript
Win10玩csgo闪退如何解决?Win10玩csgo闪退的解决方法
2022/07/23 数码科技