假设我正在使用一个名为 Person 的实体。人具有诸如身高、体重等属性,这些属性可以随着时间的推移而改变。
class Person
{
private $id;
private $weight;
private $height;
// etc...
}
我希望用户能够返回并在某种形式的图表上查看随时间的变化。为每个单独的属性存储每个连续更改的最佳方法是什么?
我查看了 DoctrineExtension Loggable 接口,但它为整个对象创建了一个更改条目,因此您不能通过与对象无关的特定属性向后“浏览”,该属性已更改。
同样,使用 Loggable 恢复到以前的版本会导致您丢失所述版本和当前版本之间的任何更改(如预期的那样,但我希望能够删除特定条目)。
最好的方法是从 Person 到“条目对象”的经典OneToMany/ManyToOne关系,例如or (其中包含条目的值和时间戳),将最新的时间戳作为当前值?PersonHeightEntry
PersonWeightEntry
例子:
class Person
{
// @ORM\OneToMany(...)
private $weight_entries;
}
class PersonWeightEntry
{
private $value;
private $timestamp;
// @ORM\ManyToOne(...)
private $person;
}