首页 > 数据库 >数据库字段设置非空, phalcon创建数据验证不通过

数据库字段设置非空, phalcon创建数据验证不通过

时间:2024-11-14 11:40:43浏览次数:1  
标签:非空 为空 数据库 设置 public phalcon 赋值

在使用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)
    );

  }
复制代码

 

该方法直接把底层判断字段是否为空的逻辑关闭了,可以一劳永逸的解决这个问题,缺点就是,自己前后台得做好必填字段的判断。

三、另外的方案

解决方法一:

进行赋值插入数据库失败,发现非空字段不能在model下beforeCreate里面赋值,

只能是:

$user = new Users();

下直接赋值:

$user->action_act = "y"

 

解决方法二:

换成:beforeValidationOnCreate

标签:非空,为空,数据库,设置,public,phalcon,赋值
From: https://www.cnblogs.com/cheng6018/p/18545689

相关文章

  • [OLAP/MPP/数据库] Clickhouse 性能优化篇
    性能分析system.query_log表简介此表包含已执行查询的相关信息,例如:开始时间、处理持续时间、错误消息。您可以更改query_log的设置,在服务器配置的query_log部分。您可以通过设置log_queries=0来禁用query_log.我们不建议关闭此日志,因为此表中的信息对于解决问题很......
  • 快速上手 KSQL:轻松与数据库交互的利器
    上次我们通过Docker安装了KingbaseES数据库,今天我们将开始学习并快速上手使用KSQL。简单来说,KSQL本质上是一个客户端工具,用于与数据库进行交互。启动后,我们可以像使用普通的SQL一样执行查询和操作,这将是一个很好的练习机会。同时,我们也可以借此机会探索KSQL是否有一些......
  • 通过 AWR报告查看oracle 数据库服务器的负载(load average)异常高的原因
    要诊断Oracle数据库服务器的负载(loadaverage)异常高的原因,通过AWR(AutomaticWorkloadRepository)报告可以帮助你识别潜在的瓶颈或负载源。AWR报告提供了数据库的详细性能数据,涵盖了系统负载、SQL执行、I/O性能、内存使用等多方面的信息。以下是通过AWR报告查看和诊断高负......
  • C#不装Oracle客户端,连接数据库的方法
      前几天临时碰到个项目需求,让从Oracle数据库中直接查询视图数据。  按照正常的模式,首先问清楚Oracle版本,然后安装Oracle客户端,更改“listener.ora”监听文件,安装PLSQL,连接、查询。  再在代码中引用“System.Data.OracleClient.dll”,配置连接字符串使用。  太麻烦了! ......
  • 数据库查询语言(DQL)
    数据库查询语言(DQL)数据库的查询是我们整个数据库学习中的重点内容,面对数据库中庞大的数据,该如何去寻找我们想要的数据,就是我们主要讨论的问题。单表查询单表查询是最简单的一种查询,我们只需要在一张表中去查找数据即可,通过使用语句来进行单表查询:select--指定查询某一列数据......
  • 基于大数据 Python 智能水果销售系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • 【计算机毕设选题讲解】基于JAVA的校园二手物品交易系统的设计与实现 【附源码+数据库
    ✍✍计算机毕设编程指导师**⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、小程序、大数据实战项目集⚡⚡文末获取......
  • 数据库系列: 主流分库分表中间件介绍(图文总结)
    数据库系列:主流分库分表中间件介绍(图文总结) 相关文章数据库系列:MySQL慢查询分析和性能优化数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更数据库系列:覆盖索引和规避回表数据库系列:数据库高可用及无损扩容数据库系列:使用高区分度索引列提升性能数据......
  • 连接数据库实现页面的增删改查
    创建项目,选择maven为构建系统在pom.xml文件中添加war包在idea创建web项目并修改路径为src\main\webapp再配置tomcat以下是项目的类和文件1.配置pom.xml文件将需要用的配置文件都导进去点击查看代码<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://m......
  • SpringBoot医院管理系统5nr0z--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景随着医疗技术的不断进步和医疗需求的日益增长,医院管理面临着前所未有的挑战。传统的医院管理方式已难以满足现代医疗服务的需要,存在信......