摘要:我們來看看一個方法用法。中的方法,他是一個集添加和修改與一身的一個方法。在上面的這個方法中他會自動識別,在數組中有沒有主鍵,主鍵存在執行修改執行添加但是我們會發現,將中沒有的字段,他會清空。
我們來看看一個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);
這樣就將數據被清空的問題解決了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/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參數來實現數據庫的...
閱讀 1113·2021-11-23 09:51
閱讀 1080·2021-10-18 13:31
閱讀 2979·2021-09-22 16:06
閱讀 4278·2021-09-10 11:19
閱讀 2204·2019-08-29 17:04
閱讀 432·2019-08-29 10:55
閱讀 2482·2019-08-26 16:37
閱讀 3379·2019-08-26 13:29