我有一个数据库结构,其中有一个字段content
。在数据库中,这是一个BLOB
(所以一个string
)。 content
包含一个JSON编码的字符串。Symfony2原则更改实体负载的值
当我加载这个,我想加载到一个特定的Content
对象(不同的Content
子类为JSON的每种可能的格式)。
是否有任何事件或任何东西,我可以连上,所以我可以赶上实体是内置前值(所以我可以有setContent()
类型一丝Content
类,而不必是通用的,我会如果信息在拦截前被加载到实体中,则必须执行此操作)。
任何想法?
更多的细节。基本上我想象的是有某种类的Factory类,它接受一个JSON字符串并将其转换为适当的对象。
{
body: "ABC",
value: 5
}
去一个类的对象是这样的:
class MyContent extends Content
{
protected $body;
protected $value;
}
我不能用典型的对象映射,因为它是一个JSON字符串的对象。
进一步澄清
基本上,我有一个名为Box
的实体。 Box
的值为content
,该值应该是Content
的实例。
在正常情况下,如果Content
是一个正常的数据库实体,我只想挂钩Box
和Content
之间的一对一的关系,这将在该Box
正确加载Content
,而无需做任何特殊。
但是,在这种情况下,Content
可以有多种形式。要处理这个问题,它将作为一个JSON对象存储在Box
的表中的BLOB
字段中。这意味着当学说试图加载Box
时,它会尝试加载一个字符串。
我可以简单地让Box::setContent()
接受任何参数并根据它是否为字符串或Content
对象来处理它。
然而,我想它,以便当它被用来它是总是一个Content
对象,所以想要类型暗示为函数(即,Box::setContent(Content $content)
)。问题是这会阻止Doctrine向该字段提供字符串。
这就是为什么我想拦截content
的原则所取的值,并在将其加载到实体Box
之前用适当的对象替换它。
我不认为任何的教义事件都是我想要的,所以它可能不是真的。= S
有一个(https://doctrine-orm.readthedocs.org/en/latest/reference/events.html?highlight=lifecycle#lifecycle-events)在可用[生命周期事件列表]文档。不确定哪一个可能会用于您的案例,可能需要更多信息 – 2013-03-22 23:45:19
在实体类的构造函数中加载内容对象怎么样? – Sethunath 2013-03-23 06:31:48