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 相关文章推荐
WindowsXP中快速配置Apache+PHP5+Mysql
Jun 05 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
Feb 04 PHP
PHP Global变量定义当前页面的全局变量实现探讨
Jun 05 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
Apr 08 PHP
php通过strpos查找字符串出现位置的方法
Mar 17 PHP
php 利用array_slice函数获取随机数组或前几条数据
Sep 30 PHP
php生成curl命令行的方法
Dec 14 PHP
PHP中call_user_func_array回调函数的用法示例
Nov 26 PHP
php微信公众号开发(3)php实现简单微信文本通讯
Dec 15 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
利用PHPExcel实现Excel文件的写入和读取
Apr 26 PHP
PHP设计模式概论【概念、分类、原则等】
May 01 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
thinkphp中memcache的用法实例
2014/11/29 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
遍历jquery对象的代码分享
2011/11/02 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
jquery鼠标悬停导航下划线滑出效果
2017/09/29 jQuery
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
Python PyQt5整理介绍
2020/04/01 Python
python新手学习使用库
2020/06/11 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
力学专业毕业生自荐信
2013/11/17 职场文书
列车长先进事迹材料
2014/01/25 职场文书
区三好学生主要事迹
2014/01/30 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
英语辞职信怎么写
2015/02/28 职场文书
会计专业求职信范文
2015/03/19 职场文书
2015年酒店工作总结
2015/04/28 职场文书
起诉书格式范文
2015/05/20 职场文书
旷工检讨书大全
2015/08/15 职场文书
小学副班长竞选稿
2015/11/21 职场文书