摘要:我们来看看一个方法用法。中的方法,他是一个集添加和修改与一身的一个方法。在上面的这个方法中他会自动识别,在数组中有没有主键,主键存在执行修改执行添加但是我们会发现,将中没有的字段,他会清空。
我们来看看一个save方法用法。
phalcon中的save方法,他是一个集 添加 和 修改 与一身的一个方法。
$this->someModel->save($data);
在上面的这个方法中他会自动识别,在$data 数组中有没有 主键,
if(主键存在){ 执行修改; }else{ 执行添加 }
但是我们会发现,将$data 中没有的字段,他会清空。
下面由marser的phalconCMS中我们可以看到,做了这样的处理
/** * 封装phalcon model的update方法,实现仅更新数据变更字段,而非所有字段更新 * @param array|null $data * @param null $whiteList * @return bool */ public function iupdate(array $data=null, $whiteList=null){ if(count($data) > 0){ $attributes = $this -> getModelsMetaData() -> getAttributes($this); $this -> skipAttributesOnUpdate(array_diff($attributes, array_keys($data))); } return parent::update($data, $whiteList); }
其中getModelsMetaData
/** * Returns the models meta-data service related to the entity instance * * @return PhalconMvcModelMetaDataInterface */ public function getModelsMetaData() {}
zephir源码
/** * Returns the models meta-data service related to the entity instance */ public function getModelsMetaData() ->{ var metaData, dependencyInjector; let metaData = this->_modelsMetaData; if typeof metaData != "object" { let dependencyInjector = this->_dependencyInjector; /** * Obtain the models-metadata service from the DI */ let metaData = dependencyInjector->getShared("modelsMetadata"); if typeof metaData != "object" { throw new Exception("The injected service "modelsMetadata" is not valid"); } /** * Update the models-metadata property */ let this->_modelsMetaData = metaData; } return metaData; }
和getAttributes
/** * Returns table attributes names (fields) * * @param PhalconMvcModelInterface $model * @return array */ public function getAttributes(PhalconMvcModelInterface $model);
还有skipAttributesOnUpdate
/**
* Sets a list of attributes that must be skipped from the
* generated UPDATE statement
*
* skipAttributesOnUpdate(array("modified_in"));
* }
* }
*
*
* @param array $attributes
*/
protected function skipAttributesOnUpdate(array $attributes) {}
zephir源码
/**
* Sets a list of attributes that must be skipped from the
* generated UPDATE statement
*
*
* skipAttributesOnUpdate(
* [
* "modified_in",
* ]
* );
* }
* }
*
*/
protected function skipAttributesOnUpdate(array! attributes) -> void
{
var keysAttributes, attribute;
let keysAttributes = [];
for attribute in attributes {
let keysAttributes[attribute] = null;
}
this->getModelsMetaData()->setAutomaticUpdateAttributes(this, keysAttributes);
}
都是phalcon自带的
用下面方式进行保存
$result = $this -> iupdate($data);
这样就将数据被清空的问题解决了。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/22362.html
摘要:方法,如图总结因为灰度环境在公司内网,访问量较小,相比方法,方法可以暂时解决灰度测试时的缓存问题。但是仍然存在风险。 背景:php做web开发,MVC,phalcon 1.生产与灰度数据缓存 原因: service层获取数据,有新增数据字段; controller层是通过redisCache调用service接口; redisCache采用redis-file双缓存结构,可能存在...
摘要:一般至少要在执行路由前要判断用户是否具有权限一般在中,所以应该在它之前获得填充。以下代码可参考这里的方法就是重点。参考这里把对象保存在中。 showImg(https://segmentfault.com/img/bVkdih); 使用如下图解释这个组件: showImg(https://segmentfault.com/img/bVkdii); 实际最终真正要使用的是access_l...
摘要:本文描述了框架中数据库操作方法,主要讨论框架的组件中的操作方法。属性方法在框架中支持属性的扩展查询,在上例中,可以把条件语句改为同时省略查询条件结果不变。 本文描述了PHP-Phalcon框架中数据库操作方法,主要讨论Phalcon框架的Model组件中的操作方法。更详细的Model介绍请参考:官方文档 1. 连接数据库 在Phalcon框架中,通过在DI中注入db参数来实现数据库的...
阅读 1093·2021-11-23 09:51
阅读 1055·2021-10-18 13:31
阅读 2936·2021-09-22 16:06
阅读 4100·2021-09-10 11:19
阅读 2160·2019-08-29 17:04
阅读 382·2019-08-29 10:55
阅读 2433·2019-08-26 16:37
阅读 3345·2019-08-26 13:29