在运行时向对象添加属性,并保存到数据库

时间:2013-05-11 17:46:29

标签: php django oop model-view-controller orm

我有一组模型类定义,每个定义都有一些属性和方法。

每个新的模型类定义都映射到自己的数据库表,这些属性构成了表列。然后可以充分保存每个新创建的对象,以备不时之需。

我的问题是,如何优雅地允许在运行时添加其他属性,并保存它而无需重新迁移数据库中的所有表。

例如,假设我有一篇"文章"具有名称,创建日期和文章正文的对象作为属性(最初),但在运行时,用户决定对于特定文章他们想要将概要添加为属性,如何将新实体保存到数据库?

我想我试图(除其他事项外)模仿在Drupal中添加字段或在Wordpress中自定义字段。

由于必须在创建或更新表时指定每列的数据类型,因此我能想到的唯一方法是创建一个以数组作为数据类型的列。这个解决方案虽然感觉有点尴尬,只是想知道其他人是如何做到的。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

作为最低标准,您可以将对象保持为一系列键值对,但这听起来很笨拙而且很慢。当你有包含物体等的物体时,我也可以设想做噩梦。

或者,您可以在存储之前对它们进行序列化(可能是作为xml文档?)但是这会放弃数据库级别的任何类型的结构,如果您希望在特定列值上查询数据库,则会使问题复杂化。

但如果我是你,我会阅读一些“休眠”实用程序,例如Hibernate(!)来了解它们如何持久化。这些实用程序已经解决了您的确切问题,您可以保证他们会对此进行相当多的考虑。

如果你很幸运,甚至可以使用开箱即用的实用工具,而无需了解细节。