摘要:我們來(lái)看看一個(gè)方法用法。中的方法,他是一個(gè)集添加和修改與一身的一個(gè)方法。在上面的這個(gè)方法中他會(huì)自動(dòng)識(shí)別,在數(shù)組中有沒(méi)有主鍵,主鍵存在執(zhí)行修改執(zhí)行添加但是我們會(huì)發(fā)現(xiàn),將中沒(méi)有的字段,他會(huì)清空。
我們來(lái)看看一個(gè)save方法用法。
phalcon中的save方法,他是一個(gè)集 添加 和 修改 與一身的一個(gè)方法。
$this->someModel->save($data);
在上面的這個(gè)方法中他會(huì)自動(dòng)識(shí)別,在$data 數(shù)組中有沒(méi)有 主鍵,
if(主鍵存在){ 執(zhí)行修改; }else{ 執(zhí)行添加 }
但是我們會(huì)發(fā)現(xiàn),將$data 中沒(méi)有的字段,他會(huì)清空。
下面由marser的phalconCMS中我們可以看到,做了這樣的處理
/** * 封裝phalcon model的update方法,實(shí)現(xiàn)僅更新數(shù)據(jù)變更字段,而非所有字段更新 * @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); }
其中g(shù)etModelsMetaData
/** * 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自帶的
用下面方式進(jìn)行保存
$result = $this -> iupdate($data);
這樣就將數(shù)據(jù)被清空的問(wèn)題解決了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22362.html
摘要:方法,如圖總結(jié)因?yàn)榛叶拳h(huán)境在公司內(nèi)網(wǎng),訪問(wèn)量較小,相比方法,方法可以暫時(shí)解決灰度測(cè)試時(shí)的緩存問(wèn)題。但是仍然存在風(fēng)險(xiǎn)。 背景:php做web開(kāi)發(fā),MVC,phalcon 1.生產(chǎn)與灰度數(shù)據(jù)緩存 原因: service層獲取數(shù)據(jù),有新增數(shù)據(jù)字段; controller層是通過(guò)redisCache調(diào)用service接口; redisCache采用redis-file雙緩存結(jié)構(gòu),可能存在...
摘要:一般至少要在執(zhí)行路由前要判斷用戶是否具有權(quán)限一般在中,所以應(yīng)該在它之前獲得填充。以下代碼可參考這里的方法就是重點(diǎn)。參考這里把對(duì)象保存在中。 showImg(https://segmentfault.com/img/bVkdih); 使用如下圖解釋這個(gè)組件: showImg(https://segmentfault.com/img/bVkdii); 實(shí)際最終真正要使用的是access_l...
摘要:本文描述了框架中數(shù)據(jù)庫(kù)操作方法,主要討論框架的組件中的操作方法。屬性方法在框架中支持屬性的擴(kuò)展查詢,在上例中,可以把條件語(yǔ)句改為同時(shí)省略查詢條件結(jié)果不變。 本文描述了PHP-Phalcon框架中數(shù)據(jù)庫(kù)操作方法,主要討論P(yáng)halcon框架的Model組件中的操作方法。更詳細(xì)的Model介紹請(qǐng)參考:官方文檔 1. 連接數(shù)據(jù)庫(kù) 在Phalcon框架中,通過(guò)在DI中注入db參數(shù)來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的...
閱讀 1118·2021-11-23 09:51
閱讀 1082·2021-10-18 13:31
閱讀 2991·2021-09-22 16:06
閱讀 4284·2021-09-10 11:19
閱讀 2206·2019-08-29 17:04
閱讀 437·2019-08-29 10:55
閱讀 2485·2019-08-26 16:37
閱讀 3381·2019-08-26 13:29