Phalcon只更新改变的字段

Phalcon为何是PHP性能架构的重新定义 Phalcon并非传统PHP框架,而是一种以C扩展形式深度集成Zend引擎的高性能架构范式。其核心原理在于绕过PHP解释器的字节码编译、自动加载与用户态对象创建流程,直接在内核层执行路由、ORM、DI等逻辑,从而实现亚毫秒级响应与线性内存增长。这种设计带来显著技术价值:消除PSR-4文件I/O开销、规避OPcache失效风险、支持连接池隐式复用,并天然适配高并发、低延迟场景,如支付回调、库存查询与JWT校验。在ThinkPHP 3.2.3等解释型框架仍受限于opcode编译与内存分配抖动时,Phalcon凭 阅读详情

前言

之前官网做了一次改版,运行一年多的时间,状态良好。在性能和抗压程度上都有了比较大的提升。

然而,在对接了 TMS(第三方配送系统) 和电子发票之后,会经常发生订单状态异常的情况。

问题

经过老大和慧哥的分析(我参与了问题的解决,未参与分析),流程如下:

  • 配送员在 TMS 操作订单完成(完成中);
  • 开电子发票的脚本获取了订单的信息;
  • TMS 更新完成,订单状态发生改变;
  • 开电子发票的脚本重新更新了订单的信息,订单被变更为 TMS 更新之前的状态。

正常的 Phalcon 的 update 流程如下:

$robot = Robots::findFirstById($id);
$robot->name = 'wali';
$robot->update();

// ------- or -------

$robot = Robots::findFirstById($id);
$robot->update(['name' => 'wali']);

理想中的 SQL 语句:

UPDATE `robots` SET `name` = 'wali' WHERE `id` = 1

现实中的 SQL 语句:

UPDATE `robots` SET `name` = 'wali', `model` => '1' WHERE `id` = 1

也就是说 Phalcon 会将取到的所有数据都更新一次。

如果在A取到结果之后,B也操作并更新了这个记录之后,A再更新,那么B的操作就相当于没有做,这就造成了上面的尴尬一幕。

解决

解决方案有好几个,我会从最不建议的方式开始。

使用白名单

Phalcon 更新一条记录的过程中,会调用 model 类中的 save 方法,而 save 方法提供了一个参数 whiteList,在 whiteList 之内的字段是不会被更新的。

优点:可以限制某些字段的更新。

缺点:针对当前情况,需要在每一处操作限制,而且需要更改 update 的方式为 save,工作量太大。

自己写SQL

可以获取写服务之后,直接 execute SQL 语句,这样可以避免所有字段更新的情况。

优点:适合批量更新或者多表更新的情况。

缺点:和第一种方案一样,需要修改每一处地方,工作量大。

设置只更新变化的字段

Phalcon 本身还是提供了只更新变化字段的方法的,调用也很简单,在 Model 初始化时,调用 useDynamicUpdate 方法,参数为 true。

public function initialize()
{
    $this->useDynamicUpdate(true); // 就是它,神奇的方法
    $this->setReadConnectionService('slave');
    $this->setWriteConnectionService('master');
    $this->setSource($this->_tableName);
}

优点:便捷,快速,改动地方少。

缺点:当然是有的,不过我没有想到…

总结

有些雷,会在不知不觉中埋下,所以对于未知的东西,还是要多了解,才能够作出更加正确的决定。

– EOF –
本文转载自IMJCW
原文链接:Phalcon只更新改变的字段

phalcon框架简易版包含控制器、模型、视图包含了展示与添加的功能 phalcon框架简易版包含控制器、模型、视图包含了展示与添加的功能,方便新手快速上手,如有不会的可以向小编提问呦,对新手绝对的超值,你要是会用就没必要下载了,纯粹送给新手,10分钟让你入门。 立即下载

相关推荐

Hierarchical-Localization 环境配置与依赖管理全攻略

本文提供了Hierarchical-Localization(hloc)视觉定位工具箱从零开始的环境配置与依赖管理全攻略。针对Windows、Ubuntu和macOS三大操作系统,详细解析了Python版本选择、PyTorch与CUDA版本匹配、pycolmap版本锁定等核心依赖的安装步骤,并汇总了权重文件格式、NumPy版本、路径配置等常见问题的排查与解决方案,旨在帮助用户高效搭建稳定的hloc开发环境。

weixin_29066781的博客 335

phalcon curd(一)

插入数据 $User = new User(); //设置需要写入的数据 //如果在model里面没有设置公共变量,对这边的使用也没有影响但是对IDE有良好的提示功能 $User->name = "phalcon"; $User->phone = "13011111111"; $User->passwd = "passwd"; //执行操

luogan129的博客 755

Java对接(BSC)币安链 | BNB与BEP20的开发实践(三)水龙头 WEB3

这一节我们讲一个币安测试链如何获取到BNB、USDT等BEP20数字货币(水龙头)来让我们前期测试开发。如图:我们将创建的地址填入相应输入框,来获取到测试BNB以及其他BEP20数字币。发币可能需要交易等待,请耐心等待即可,交易完成后,币会到达您的地址内。上一节我们用代码来实现BNB转账、BEP20转账、链上交易监控。2.MetaMask(小狐狸)浏览器插件 🪜。使用EDGE浏览器可以在浏览器直接打开。使用Chrome浏览器,请使用🪜打开。基本工作就绪后,即可进行开发测试。3. 测试区块链浏览器 🪜。

大猩猩的专栏 2790

phalcon中save方法的用法和update方法

我们来看看一个save方法用法。 phalcon中的save方法,他是一个集 添加 和 修改 与一身的一个方法。 $this->someModel->save($data); 在上面的这个方法中他会自动识别,在$data 数组中有没有 主键, if(主键存在){ 执行修改; }else{ 执行添加 } 但是我...

weixin_34283445的博客 1359

ORB-SLAM3单目+IMU实战:从数据加载到位姿优化的完整流程解析

本文详细解析了ORB-SLAM3单目+IMU模式的完整实战流程。从EuRoC等数据集的数据格式准备、系统启动与数据流入口,到帧构建、IMU预积分、视觉-惯性联合初始化,再到基于运动模型的跟踪、局部地图优化及多线程协同,提供了从环境配置到代码解读的全面指南,并分享了参数调优与性能分析的实用调试经验。

weixin_29085151的博客 296

实战指南!基于STM32的智能环境监测系统(代码+硬件设计+云端控制)

本文详细介绍了基于STM32的智能环境监测系统的设计与实现,包括硬件选型、电路设计、软件架构和云端控制。系统通过DHT11温湿度传感器和MQ-2烟雾传感器实时监测环境数据,STM32F103C8T6主控芯片处理数据并通过ESP8266上传至中国移动物联网平台,支持手机APP远程监控。项目成本低、稳定性高,适合智能家居和环境监测应用。

weixin_29194817的博客 433

Day25 SpringMVC 批量更新操作

参数绑定-集合传递 (1)什么时候前台会给后台传集合? 批量修改,将修改的多条记录放到集合中提交给后台。 demo03_update_persons.jsp <%-- 表单 只会将多条记录放到一个list里面,提交到后台 --%> <form method="post" action="${pageContext.request.contextPath}/update3.action"> <table>

qq_43639081的博客 495

【Unity 实用工具篇】✨| 受击插件Feel 详细教程,开发游戏时更好的操控 游戏打击感

在一个游戏中,游戏手感对于游戏的整体游玩体验是非常重要的,而游戏手感中有一个很重要的点:打击感 那本篇文章就来讲一下打击感中的受击反馈部分。 在游戏中经常会用到攻击敌人,敌人扣血,执行某些受击功能的执行,尤其是对于有战斗场景的游戏来说,这就是标准的受击反馈。 所以引出本篇文章的主角:受击插件 Feel 的使用,2D和3D游戏都可以使用。

努力前行,总会成为自己心中的那道光 3万+

phalcon笔记

/不更新age字段 $this->useDynamicUpdate(true);//加速性能,需要更新的字段更新 $this->setSchema("test");$di->set和$di->setShare()是单利模式 不需要再实例化了。phal orm没有提供批量删除,通过hydration控制输出。

wade1010的专栏 191

YOLOv11改进入门篇 | 手把手讲解改进模块如何实现高效涨点,以SimAM注意力模块为例

本文记录的是基于SimAM注意力模块的YOLOv11目标检测方法研究。SimAM注意力模块通过优化能量函数来获得每个神经元的三维权重,而或增加计算复杂度。若是有轻量化需求的小伙伴,无参的注意力模块也许是一个不错的选择。

Limiiiing的博客 9037

Java的API帮助文档

JDK帮助文档 SUN公司为JDK工具包提供了一整套文档资料,我们习惯上称之为JDK文档。 JDK文档中提供了Java中的各种技术的详细资料,以及JDK中提供的各种类的帮助说明。 JDk文档是Java语言的完整说明,大多数书籍中的类的介绍都要参照它来完成,它是编程者经常查阅的资料 如何理解API:就当做是一个“字典”,“使用手册”,API就相当于是一个电子的帮助文档,可以帮我们查看JDK提供的类的信息,平时查看的时候可结合百度一起看。 官网下载: 1、登录Oracle官网(Oracl.

人生得意须尽欢 2万+

phalcon 自动加载_phalcon model在插入或更新时会自动验证非空字段的解决办法

对phalcom框架不了解的朋友可以点击了解下。在使用phalcon的insert和update功能时,因为数据库所有的字段设置的都是NOT NULL,而phalcon的model在插入或更新之前会自动判断字段是否需要必填,因此导致有空字段时无法存入。开始遇到这问题时,想到两种解决方法:一、改数据库字段,把NOT NULL改为可以为空。但该数据库还得去找DBA,而且为了性能,DBA要求一般没有特殊...

weixin_39850143的博客 212

CT探测器普遍采用“星形拓扑+多ADC模组”架构的TDC(时间数字转换器)设计方案

本文提出一种基于TDC反馈机制的CT探测器时钟同步方法,通过延时测量、偏差计算和动态补偿三步硬件流水线,实现高精度同步。系统采用Xilinx Kintex UltraScale FPGA内置CARRY8进位链构建3.5ps分辨率的TDC,结合多级比较器和延迟单元,形成闭环反馈控制。实验表明,在512通道、1.28m传输距离下,同步精度稳定在10ps以内,较传统方案提升两个数量级,并能动态补偿干扰抖动。该方案解决了传统方法在CT旋转腔体环境下精度不足的问题,为下一代超高清CT提供了有效的时钟同步解决方案。

whm128的博客 274

phalcon save流程

phalcon官方文档是这么写的 Operation Name Can stop operation? Explanation Inserting/Updating ...

chiyantuo9157的博客 334

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

phalcon无法更新分区字段解决办法

表里面有个分区字段,更新后,保存成功,结果实际上数据库没有更新。 后来使用原生sql,解决了这个问题。 获取di中的数据库连接,直接执行sql语句即可,下面的db为注册的数据库服务名 $db = $this->getDI()->getShared('db');//在controller中 或者 Di::getDefault() $db->execute($sql); 注意,如用...

weixin_30765475的博客 85

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

phalcon executeQuery使用

在使用这个方法的时候常被返回结果所吓倒,以至于寻求其他方法 object(Phalcon\Mvc\Model\Query\Status)#76 (2) { ["_success":protected]=&gt; bool(true) ["_model":protected]=&gt; NULL } 下面将举例说明这个方法执行更改数据 示例 &lt;?php $phql = "U...

benben0729的专栏 1130

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

使用Phalcon的Models

phalcon官方文档中,对模型器的解释

赵健峰的博客 588

解决phalcon model在插入或更新时会自动验证非空字段

在使用phalcon的insert和update功能时,因为数据库所有的字段设置的都是NOT NULL,而phalcon的model在插入或更新之前会自动判断字段是否需要必填,因此导致有空字段时无法存入。 开始遇到这问题时,想到两种解决方法: 一、改数据库字段,把NOT NULL改为可以为空。   但该数据库还得去找DBA,而且为了性能,DBA要求一般没有特殊情况,字段必须是NOT NULL...

weixin_30498807的博客 270

php 登录 非空验证,PHP实战:phalcon model在插入或更新时会自动验证非空字段的解决办法...

《PHP实战:phalcon model在插入或更新时会自动验证非空字段的解决办法》要点:本文介绍了PHP实战:phalcon model在插入或更新时会自动验证非空字段的解决办法,希望对您有用。如果有疑问,可以联系我们。框架不了解的朋友可以点击了解下.PHP学习phalcon框架使用指南PHP学习在使用phalcon的insert和update功能时,因为数据库所有的字段设置的都是NOT NUL...

weixin_39892019的博客 135

phalcon学习笔记

格式乱了 笔记链接http://note.youdao.com/s/5fKQgmSG 网上下载的pdf或者官方文档说明代码示例有些错误。 $di->set和$di->setShare()是单利模式 不需要再实例化了。每次请求都是同一个 forward: 是controller内部跳转 initialize 每次进入controller都会执行 比如一个action中forward到另外一个控制器中 onConstruct 只初始化一次 ...

wade1010的专栏 379

phalcon3.4的migration

phalcon3.4的migration

guohun01的博客 252

phalcon 生成时间戳

模型自动生成时间戳use Phalcon\Mvc\Model\Behavior\Timestampable;public function initialize() { $this->addBehavior( new Timestampable( [ "beforeCreate" => [

xueling022的专栏 865

Phalcon入门教程之模型CURD(2)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34234721的博客 117

Phalcon7发布1.1.0版

合并 Phalcon\Mvc\Model\Validator\* 到 Phalcon\Validation\Validator\ 统一验证类。 优化表单类,更加方便的创建新的表单元素,并支持转换为数组,提供给前端JS动态生成表单。 内置支持 HMVC。强化 Model,更加方便的自定义字段和映...

chewuchu6937的博客 142
下一篇: PHP SESSION 自定义会话管理器
IMJCW
博客等级 码龄10年 13粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值