2013-05-11 40 views
0

我有一組模型類定義,每個定義都有一些屬性和方法。在運行時向對象添加屬性並保存到數據庫

每個新模型類定義都被映射到它自己的數據庫表中,這些屬性組成表格列。每一個新創建的物體都可以在下雨天得到充分保存。

我的問題是,我如何優雅地允許在運行時添加額外的屬性,並保存它而不重新遷移數據庫中的所有表。例如,假設我有一個名爲「創建日期」和文章主體的「Article」對象作爲屬性(最初),但是在運行時,用戶決定爲特定文章添加一個摘要作爲屬性,我如何將新實體保存到數據庫?

我想我試圖(除其他外)模仿在Drupal中添加字段或Wordpress中的自定義字段。

由於在創建或更新表格時必須指定每個列的數據類型,因此我唯一能想到的方法是創建一個具有數組作爲數據類型的列。這個解決方案雖然感覺有些尷尬,只是想知道別人怎麼做到的。

您的幫助將不勝感激。

+1

你爲什麼用PHP和Django標記這個?到目前爲止它實現了什麼? – 2013-05-11 17:48:23

+0

到目前爲止,PHP,但我有一些與其反射API的困難,所以考慮切換到Python和Django – Charl 2013-05-11 17:49:46

回答

0

作爲最低的共同標準,您可以將您的對象作爲一系列鍵值對保存下來,但這聽起來很笨重且很慢。或者,你可以在存儲之前序列化它們(也許是xml文檔,或許?)但是,這會放棄在數據庫級別的任何類型的結構,並且會使事情複雜化,如果你希望在特定的列值上查詢數據庫。

但是,如果我是你,我會閱讀一些「休眠」實用程序,例如休眠(!)來感受他們如何堅持的東西。這些實用程序已經在解決您確切的問題,並且您可以保證他們會對此進行相當程度的思考。

如果幸運的話,甚至可能會有這樣一個實用工具,您可以直接使用,無需理解實質。

+0

謝謝你指着我的鼻子在正確的方向。雖然我正在按照您的建議深入研究冬眠,但您是否有任何可以與我分享的好消息?提前謝謝了。 – Charl 2013-05-12 07:54:16

+0

我並不是這方面的專家,但我知道Hibernate是一個開源項目:[http://www.hibernate.org/](http://www.hibernate.org/)。這裏快速瀏覽一下,顯示了大量的文檔,加上源代碼,即使你需要去那個級別 – PeteH 2013-05-12 09:33:48

相關問題