2013-01-06 141 views
0

的单一属性可以说,我与名为Person实体合作。人有属性,如身高,体重等...可随时间变化。版本/跟踪实体

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

    // etc... 
} 

我希望用户能够返回并查看某种形式的图表随时间的变化。为每个独立属性存储每个连续更改的最佳方式是什么?

我已经看过DoctrineExtension Loggable接口,但是它会为整个对象创建一个更改条目,因此您不能通过与已更改的对象无关的特定属性向后浏览。

同时,回复到以前的版本有可记录的会导致你所说的版本与电流之间失去任何改变(如预期,但我希望能够删除特定的条目)。

会最好的方法是一个经典一对多/多对一从Person关系到“输入对象”,如PersonHeightEntryPersonWeightEntry(其包含值和有关条目的时间戳),拉动最当前的时间戳作为当前值?

实施例:

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

class PersonWeightEntry 
{ 
    private $value; 
    private $timestamp; 

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

回答

0

实际上,可记录的接口可以被用来存储不同版本的对象的数据库中的,而在另一种形式向用户呈现数据。例如,您可以从数据库中读取不同的高度,而无需显示整个物体呈现出来。

您也可以通过与旧的价值,你从旧版本的对象得到覆盖的实际对象的属性“还原”为只有一个属性的变化。

与一对多的关系映射有许多特性将导致数据库负载,使计算更重。

我会使用可记录的界面,在数据库中存储完整的对象,然后根据自己的需要改变你的应用程序中的表现。