我有一个具有字段的数据库结构content
。在数据库中这是 a BLOB
(so a string
)。content
包含 JSON 编码的字符串。
当我加载它时,我想将它加载到一个特定的Content
对象中(Content
对于 JSON 的每种可能格式都有一个不同的子类)。
是否有任何事件或任何我可以连接的东西,以便我可以在构建实体之前立即捕获值(所以我可以对类进行setContent()
类型提示Content
而不是必须是通用的,如果信息我必须这样做在我拦截之前加载到实体中)。
有任何想法吗?
更多细节。基本上我想象的是有某种工厂类,它接受一个 JSON 字符串并将其转换为适当的对象。
{
body: "ABC",
value: 5
}
转到这样的类的对象:
class MyContent extends Content
{
protected $body;
protected $value;
}
我不能使用典型的对象映射,因为它是对象的 JSON 字符串。
进一步澄清
基本上,我有一个名为Box
. Box
有一个content
值,它应该是Content
.
在正常情况下,如果是一个普通的数据库实体,我只需在andContent
之间建立一对一的关系,它会正确加载到而不需要做任何特殊的事情。Box
Content
Content
Box
但是,在这种情况下,Content
可以有多种形式。为了处理这个问题,它以 JSON 对象的形式存储在's 表的BLOB
字段中。Box
这意味着当 Doctrine 尝试加载时Box
,它会尝试加载一个字符串。
我可以简单地Box::setContent()
接受任何参数并根据它是字符串还是Content
对象来相应地处理它。
但是,我想要它,所以当它被使用时,它总是一个Content
对象,所以我想要函数的类型提示(即,Box::setContent(Content $content)
)。问题是这会阻止 Doctrine 为该字段提供字符串。
这就是为什么我想拦截 Doctrine 的值content
并在将其加载到实体之前将其替换为适当的对象Box
。
我不认为任何 Doctrine 事件都完全符合我的要求,所以它可能真的不可能。=S