我想将动态属性存储到数据库中。
实施例: 有些用户想要创建具有自定义特征的配置文件。这可能是年龄,爱好,工作,学校或其他什么。每个用户都可以设置自己的特色。在服务器端,这可能看起来像:
$characteristics = array(
0 => array('age', 22),
1 => array('hobby', 'php'),
2 => array('food', 'pizza'),
);
使用这种结构,可以读出属性本身和值,我也可以轻松添加和删除属性。
现在我想按学说存储这些数据。
现在的问题是我如何做到最好:
答案 0 :(得分:8)
如果你想保持简单,最好的方法可能是简单地使用数组。
Doctrine 2支持“数组”类型:如果您使用该类型映射属性,它将自动序列化并反序列化到数据库中。
例如,您可以执行以下操作:
class MyEntity {
/** @Column(type="array") */
private $attributes = array();
public function setAttribute($name, $value) {
$this->attributes[$name] = $value;
}
public function getAttribute($name) {
return $this->attributes[$name];
}
}
这样的方法可以让您轻松存储属性,并且还可以抽象出存储方式的详细信息,因此如果您希望将来更改它(例如,可能使用EAV表或这样你就不需要改变你的其他代码了。