Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在运行时向对象添加属性,并保存到数据库_Php_Django_Oop_Model View Controller_Orm - Fatal编程技术网

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

Php 在运行时向对象添加属性,并保存到数据库,php,django,oop,model-view-controller,orm,Php,Django,Oop,Model View Controller,Orm,我有一组模型类定义,每个定义都有一些属性和方法 每个新模型类定义都映射到它自己的数据库表,这些属性构成表列。每个新创建的对象都可以适当地保存起来,以备不时之需 我的问题是,我如何能够优雅地允许在运行时添加其他属性,并在不重新迁移数据库中所有表的情况下保存这些属性 例如,假设我有一个“Article”对象,其名称、创建日期和文章正文作为属性(最初),但在运行时,用户决定为特定文章添加一个摘要作为属性,如何将新实体保存到数据库中 我想我正在尝试(除其他外)模仿在Drupal中添加字段或在Wordpr

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

每个新模型类定义都映射到它自己的数据库表,这些属性构成表列。每个新创建的对象都可以适当地保存起来,以备不时之需

我的问题是,我如何能够优雅地允许在运行时添加其他属性,并在不重新迁移数据库中所有表的情况下保存这些属性

例如,假设我有一个“Article”对象,其名称、创建日期和文章正文作为属性(最初),但在运行时,用户决定为特定文章添加一个摘要作为属性,如何将新实体保存到数据库中

我想我正在尝试(除其他外)模仿在Drupal中添加字段或在Wordpress中添加自定义字段

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


非常感谢您的帮助。

作为最低公分母,您可以将对象持久化为一系列键值对,但这听起来既笨拙又缓慢。我还可以想象当你有包含物体的物体时的噩梦

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

但是如果我是你的话,我会阅读一些“休眠”实用程序,例如Hibernate(!),来了解它们是如何持续工作的。这些实用程序已经解决了您的确切问题,您可以保证,它们已经投入了相当多的精力


如果幸运的话,你甚至可以在开箱即用的情况下使用这样一个实用程序,而无需了解其本质。

为什么要用PHP和Django来标记它?到目前为止,它是用什么实现的呢?到目前为止,我在使用php的反射API时遇到了一些困难,因此考虑切换到Python和Django。感谢您为我指明了正确的方向。虽然我正按照你的建议进入冬眠期,但你有什么好的资料可以和我分享吗?非常感谢。我不是这方面的专家,但我知道Hibernate是一个开源项目:。这里的快速浏览显示了大量文档,以及源代码,即使您需要达到该级别