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 に答える