2011-10-09 53 views
2

我正在使用Propel 1.6並需要對特定數據庫中的所有表進行版本化。我有許多表,每個表都有一個在模式中定義的可版本化的表(所以表'角色'有一個'role_versionable'作爲其版本對應表)。在'角色'中保存記錄時,我想在保存之前將現有記錄複製到role_versionable。我已經將整個模式的baseClass設置爲一個自定義類(它擴展了BaseObject),並且我所生成的所有行模型類都擴展了這個類。在我的自定義保存例程中,我正在執行全新的選擇,然後將其保存到可版本化的表中。不過,我應該能夠攔截所有行類中的doSelect [One],但我不想爲模型中的每個表生成子對象。在doSelect中捕獲Propel對象的初始副本

因此,我想知道是否有一種方法,我可以鉤入postSelect或在每個doSelect後自動調用,以便在選擇對象後獲取對象的初始狀態?這將爲我節省額外的選擇,當我來版本行。

(詳細信息:我這樣做在一個自定義的方式,因爲我需要額外的元數據添加到版本表,我不相信archive_behaviour支持)

+0

一種方法,我可以採取的是生成每個我的同行的子類(該系統是一個數據庫應用程序,這樣我就必須這樣做編程方式代表用戶的,但是那是相當的實現) 。這會讓我有機會接觸到每個doSelect,但是它感覺有點不雅。那麼......有什麼想法? :-) – halfer

+0

說StackOverflow:「這個問題有一個值得+50聲望的賞金......你有23個小時獎勵賞金」。呸;因爲我收到的答案正好是零,所以我想知道我是否會因爲我超人的耐心而獎勵給自己? :) – halfer

+0

我可能會在Propel郵件列表中彈出此消息。但是,在我的第一條評論中採用這種方法並不是很大的努力 - 生成子類。不是最優雅的方法,但肯定會奏效。 – halfer

回答

1

AFAIK是沒有辦法使用在致電doSelect之前或之後掛鉤。你最好的機會是在你自己的類中重寫這個方法,並且自己添加一個鉤子。我可能會寫我自己的Peer Builder來做這件事。

威廉

+0

啊,定製同行建設者 - 好主意。由於我的應用程序是用於用戶啓動的數據庫生成的,因此我正在考慮使用正則表達式搜索並將所有行類替換爲我的自定義構建過程的一部分;不過,你的建議更優雅!我將在未來嘗試一下這個記錄。 – halfer

+0

感謝您在Propel上的工作,順便說一句 - 非常感謝。 – halfer