2012-11-09 146 views
0

嗨,大家好,這可能會出現一些奇怪的問題,但這裏有:交叉表引用

這只是一個基本的例子,所以你可以理解我想要實現的。

如果我有兩個表的mysql數據庫:「liquid_avaliable」和「liquid_records」。 液體avliable將有3列id,名稱,金額。 liquid_records將具有id,name,amount_used,liquid_avaliable_id。

是否有可能每次添加「液體記錄」時,都會從可用表格中扣除金額。

目的是讓你可以快速檢查液體可用表格,看看你剩下多少。

如果有人能指出我在正確的方向,將不勝感激。

我正在使用的應用程序是在「cakePHP」中構建的,而我的數據庫系統是mysql,但Postgre sql也是可用的。

在此先感謝。

回答

1

是的 - 您可以使用afterSave()回調方法。

LiquidRecord保存時會自動觸發 - 此時您可以添加邏輯重新計算並將新的總數保存到您的LiquidAvailable模型中。

另一種選擇是查看CakePHP's Event System

+0

嗨戴夫,花了幾個小時試圖讓我的頭在此。已經嘗試saveAll,saveMany和SaveAccociated,但仍然縫隙得到無盡的錯誤。我很明確地做了一些根本性的錯誤,只是不太確定它是什麼。已經爲它建立了一個新的線程[這裏](http://stackoverflow.com/questions/13329946/how-do-i-edit-a-associated-models-info-with-beforesave-or-aftersave-in- cakephp)你將無法檢查出來,看看我是否在遙遠的軌道上?謝謝你的時間。 – agit

1

你有幾種解決這個問題的方法。 (1)你什麼也不做,並計算運行時可用的數量。對於合理的硬件和適中的數據,這可能是一個可以接受的解決方案。性能應該合理,甚至高達數十萬行。

(2)規範化數據庫解決方案是使用觸發器。在「液體記錄」表上創建一個觸發器。添加新記錄時,從另一個表中減去或添加金額。 (3)使用存儲過程執行所有插入到表中的操作。這是我首選的方法。然後存儲過程可以增加或減少其他值(以及如果需要進行日誌記錄和其他操作)。

我建議你將所有的數據操作都包裝到存儲過程中,但繼續(1)。編寫一個查詢以從數據結構中獲取所需內容。根據需要添加索引。如果這不起作用,則繼續進行(3)。

+0

有一個CakePHP解決方案,這是很複雜 - 將嘗試添加答案儘快 – Dave

+0

感謝您的答覆戈登,五月還必須嘗試你的更復雜的解決方案。欣賞你的時間。 – agit