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 检查扩展库或函数是否可用的代码
Apr 06 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
php设置允许大文件上传示例代码
Mar 10 PHP
PHP实现JS中escape与unescape的方法
Jul 11 PHP
php版微信公众号接口实现发红包的方法
Oct 14 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
PHP中快速生成随机密码的几种方式
Apr 17 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
PHP设计模式之状态模式定义与用法详解
Apr 02 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
PHP按符号截取字符串的指定部分的实现方法
Sep 10 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
消息持续发送的完整例子
2006/10/09 PHP
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
jquery select(列表)的操作(取值/赋值)
2011/03/16 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
Node接收电子邮件的实例代码
2017/07/21 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
python利用正则表达式搜索单词示例代码
2017/09/24 Python
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
Python实现破解12306图片验证码的方法分析
2017/12/29 Python
python实现五子棋游戏
2019/06/18 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
表演方阵解说词
2014/02/08 职场文书
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
高中教师个人总结
2015/02/10 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS