Doctrine:如何存储动态属性

bod*_*ser 2 php mysql arrays symfony doctrine-orm

我想将动态属性存储到数据库中.

示例:某些用户想要创建具有自定义特征的配置文件.这可能是年龄,爱好,工作,学校或其他什么.每个用户都可以设置自己的特色.在服务器端,这可能看起来像:

    $characteristics = array(
        0 => array('age', 22),
        1 => array('hobby', 'php'),
        2 => array('food', 'pizza'),
    );
Run Code Online (Sandbox Code Playgroud)

使用这种结构,可以读出属性本身和值,我也可以轻松添加和删除属性.

现在我想通过学说来存储这些数据.

现在的问题是我如何做到最好:

  1. 坚持阵列
  2. JSON
  3. XML
  4. 其他?

Jan*_*nen 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];
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样的方法可以让你轻松存储属性,它也会抽象出它存储方式的细节,所以如果你想在将来改变它(例如,可能使用EAV表等)你不需要更改其他代码.