我有一个具有字段的数据库结构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之间建立一对一的关系,它会正确加载到而不需要做任何特殊的事情。BoxContentContentBox
但是,在这种情况下,Content可以有多种形式。为了处理这个问题,它以 JSON 对象的形式存储在's 表的BLOB字段中。Box这意味着当 Doctrine 尝试加载时Box,它会尝试加载一个字符串。
我可以简单地Box::setContent()接受任何参数并根据它是字符串还是Content对象来相应地处理它。
但是,我想要它,所以当它被使用时,它总是一个Content对象,所以我想要函数的类型提示(即,Box::setContent(Content $content))。问题是这会阻止 Doctrine 为该字段提供字符串。
这就是为什么我想拦截 Doctrine 的值content并在将其加载到实体之前将其替换为适当的对象Box。
我不认为任何 Doctrine 事件都完全符合我的要求,所以它可能真的不可能。=S