摘要:我们来看看一个方法用法。中的方法,他是一个集添加和修改与一身的一个方法。在上面的这个方法中他会自动识别,在数组中有没有主键,主键存在执行修改执行添加但是我们会发现,将中没有的字段,他会清空。
我们来看看一个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参数来实现数据库的...
阅读 1111·2021-11-23 09:51
阅读 1076·2021-10-18 13:31
阅读 2975·2021-09-22 16:06
阅读 4263·2021-09-10 11:19
阅读 2202·2019-08-29 17:04
阅读 429·2019-08-29 10:55
阅读 2476·2019-08-26 16:37
阅读 3375·2019-08-26 13:29
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要