3

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

示例:某些用户想要创建具有自定义特征的配置文件。这可能是年龄、爱好、工作、学校或其他。每个用户都可以设置自己的特征。在服务器端,这可能如下所示:

    $characteristics = array(
        0 => array('age', 22),
        1 => array('hobby', 'php'),
        2 => array('food', 'pizza'),
    );

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

现在我想按原则存储这些数据。

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

  1. 持久化数组
  2. JSON
  3. XML
  4. 其他?
4

1 回答 1

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 表等),您不需要更改您的其他代码。

于 2012-06-02T08:41:45.430 回答