0

Person という名前のエンティティを扱っているとしましょう。Person には、身長、体重などのプロパティがあり、時間の経過とともに変化します。

class Person
{
    private $id;
    private $weight;
    private $height;

    // etc...
}

ユーザーが戻って、時間の経過に伴う変化をなんらかのグラフで確認できるようにしたいと考えています。個別のプロパティごとに連続する変更を保存する最良の方法は何ですか?

DoctrineExtension Loggable インターフェースを見てきましたが、それはオブジェクト全体の変更エントリを作成するため、変更されたオブジェクトから独立した特定のプロパティによって後方に「ブラウズ」することはできません。

同様に、Loggable を使用して以前のバージョンに戻すと、そのバージョンと現在の間の変更が失われます (意図したとおりですが、特定のエントリを削除できるようにしたい)。

Person からor (エントリの値とタイムスタンプを含む) などの「エントリオブジェクト」への古典的なOneToMany/ManyToOne関係で、最新のタイムスタンプを現在の値として取得するのが最善の方法でしょうか?PersonHeightEntryPersonWeightEntry

例:

class Person
{
// @ORM\OneToMany(...)
private $weight_entries;
}

class PersonWeightEntry
{
    private $value;
    private $timestamp;

    // @ORM\ManyToOne(...)
    private $person;
}
4

1 に答える 1

0

実際には、Loggable Interface を使用して、オブジェクトのさまざまなバージョンをデータベースに格納し、データを別の形式でユーザーに提示することができます。たとえば、データベースからさまざまな高さを読み取って、オブジェクト全体を表示する必要なく表示できます。

オブジェクトの古いバージョンから取得した古い値で実際のオブジェクトのプロパティを上書きすることにより、1 つのプロパティのみの変更を「元に戻す」こともできます。

多くのプロパティを OneToMany 関係でマッピングすると、データベースに負荷がかかり、計算が重くなります。

Loggable Interface を使用して、完全なオブジェクトをデータベースに保存し、必要に応じてアプリケーションの表現を変更します。

于 2013-01-08T13:44:19.567 に答える