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(2)
Oct 09 PHP
PHP用mysql数据库存储session的代码
Mar 05 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
Apr 17 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
Jul 12 PHP
PHP获取文件夹内文件数的方法
Mar 12 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
php生成唯一数字id的方法汇总
Nov 18 PHP
PHP 设计模式系列之 specification规格模式
Jan 10 PHP
详解php语言最牛掰的Laravel框架
Nov 20 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 PHP
thinkphp5 模型实例化获得数据对象的教程
Oct 18 PHP
PHP中类与对象功能、用法实例解读
Mar 27 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
php5 and xml示例
2006/11/22 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
javascript 内存回收机制理解
2011/01/17 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
Python 专题三 字符串的基础知识
2017/03/19 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
python 阶乘累加和的实例
2019/02/01 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
python类的实例化问题解决
2019/08/31 Python
python取均匀不重复的随机数方式
2019/11/27 Python
pygame实现飞机大战
2020/03/11 Python
如何解决python多种版本冲突问题
2020/10/13 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
2021/02/25 Python
政审证明范文
2015/06/19 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
接收函
2019/04/22 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
SpringBoot 集成Redis 过程
2021/06/02 Redis
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python
Elasticsearch 基本查询和组合查询
2022/04/19 Python