成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

Render / 1825人閱讀

摘要:我們來(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

相關(guān)文章

  • 【踩過(guò)坑】[web]1.生產(chǎn)與灰度數(shù)據(jù)緩存;2.Mysql主從不同步;

    摘要:方法,如圖總結(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),可能存在...

    sixgo 評(píng)論0 收藏0
  • PHP框架Phalcon 之 ACL

    摘要:一般至少要在執(zhí)行路由前要判斷用戶是否具有權(quán)限一般在中,所以應(yīng)該在它之前獲得填充。以下代碼可參考這里的方法就是重點(diǎn)。參考這里把對(duì)象保存在中。 showImg(https://segmentfault.com/img/bVkdih); 使用如下圖解釋這個(gè)組件: showImg(https://segmentfault.com/img/bVkdii); 實(shí)際最終真正要使用的是access_l...

    mikyou 評(píng)論0 收藏0
  • PHP-Phalcon框架數(shù)據(jù)庫(kù)操作

    摘要:本文描述了框架中數(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ù)的...

    xiaotianyi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<