Phalcon只更新改變的字段

前言

之前官網(wǎng)做了一次改版,運行一年多的時間掸掸,狀態(tài)良好忽洛。在性能和抗壓程度上都有了比較大的提升。

然而袁稽,在對接了 TMS(第三方配送系統(tǒng)) 和電子發(fā)票之后,會經(jīng)常發(fā)生訂單狀態(tài)異常的情況擒抛。

問題

經(jīng)過老大和慧哥的分析(我參與了問題的解決推汽,未參與分析)补疑,流程如下:

  • 配送員在 TMS 操作訂單完成(完成中);
  • 開電子發(fā)票的腳本獲取了訂單的信息歹撒;
  • TMS 更新完成莲组,訂單狀態(tài)發(fā)生改變;
  • 開電子發(fā)票的腳本重新更新了訂單的信息暖夭,訂單被變更為 TMS 更新之前的狀態(tài)锹杈。

正常的 Phalconupdate 流程如下:

$robot = Robots::findFirstById($id);
$robot->name = 'wali';
$robot->update();

// ------- or -------

$robot = Robots::findFirstById($id);
$robot->update(['name' => 'wali']);

理想中的 SQL 語句:

UPDATE `robots` SET `name` = 'wali' WHERE `id` = 1

現(xiàn)實中的 SQL 語句:

UPDATE `robots` SET `name` = 'wali', `model` => '1' WHERE `id` = 1

也就是說 Phalcon 會將取到的所有數(shù)據(jù)都更新一次。

如果在A取到結(jié)果之后迈着,B也操作并更新了這個記錄之后竭望,A再更新,那么B的操作就相當于沒有做裕菠,這就造成了上面的尷尬一幕咬清。

解決

解決方案有好幾個,我會從最不建議的方式開始奴潘。

使用白名單

Phalcon 更新一條記錄的過程中枫振,會調(diào)用 model 類中的 save 方法,而 save 方法提供了一個參數(shù) whiteList萤彩,在 whiteList 之內(nèi)的字段是不會被更新的粪滤。

優(yōu)點: 可以限制某些字段的更新。

缺點: 針對當前情況雀扶,需要在每一處操作限制杖小,而且需要更改 update 的方式為 save,工作量太大愚墓。

自己寫SQL

可以獲取寫服務之后予权,直接 execute SQL 語句,這樣可以避免所有字段更新的情況浪册。

優(yōu)點: 適合批量更新或者多表更新的情況扫腺。

缺點: 和第一種方案一樣,需要修改每一處地方村象,工作量大笆环。

設置只更新變化的字段

Phalcon 本身還是提供了只更新變化字段的方法的,調(diào)用也很簡單厚者,在 Model 初始化時躁劣,調(diào)用 useDynamicUpdate 方法,參數(shù)為 true库菲。

public function initialize()
{
    $this->useDynamicUpdate(true); // 就是它账忘,神奇的方法
    $this->setReadConnectionService('slave');
    $this->setWriteConnectionService('master');
    $this->setSource($this->_tableName);
}

優(yōu)點: 便捷,快速,改動地方少鳖擒。

缺點: 當然是有的溉浙,不過我沒有想到...

總結(jié)

有些雷,會在不知不覺中埋下蒋荚,所以對于未知的東西放航,還是要多了解,才能夠作出更加正確的決定圆裕。

-- EOF --
本文轉(zhuǎn)載自IMJCW
原文鏈接:Phalcon只更新改變的字段

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末广鳍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吓妆,更是在濱河造成了極大的恐慌赊时,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件行拢,死亡現(xiàn)場離奇詭異祖秒,居然都是意外死亡,警方通過查閱死者的電腦和手機舟奠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門竭缝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沼瘫,你說我怎么就攤上這事抬纸。” “怎么了耿戚?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵湿故,是天一觀的道長。 經(jīng)常有香客問我膜蛔,道長坛猪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任皂股,我火速辦了婚禮墅茉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呜呐。我一直安慰自己就斤,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布卵史。 她就那樣靜靜地躺著战转,像睡著了一般搜立。 火紅的嫁衣襯著肌膚如雪以躯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音忧设,去河邊找鬼刁标。 笑死,一個胖子當著我的面吹牛址晕,可吹牛的內(nèi)容都是我干的膀懈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谨垃,長吁一口氣:“原來是場噩夢啊……” “哼启搂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起刘陶,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤胳赌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后匙隔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疑苫,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年纷责,在試婚紗的時候發(fā)現(xiàn)自己被綠了捍掺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡再膳,死狀恐怖挺勿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情喂柒,我是刑警寧澤满钟,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站胳喷,受9級特大地震影響湃番,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吭露,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一吠撮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧讲竿,春花似錦泥兰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迈嘹,卻和暖如春削彬,著一層夾襖步出監(jiān)牢的瞬間全庸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工融痛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留壶笼,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓雁刷,卻偏偏與公主長得像覆劈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子沛励,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容