2013-05-11 64 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

相关问题