2013-01-06 176 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

實際上,可記錄的接口可以被用來存儲不同版本的對象的數據庫中的,而在另一種形式向用戶呈現數據。例如,您可以從數據庫中讀取不同的高度,而無需顯示整個物體呈現出來。

您也可以通過與舊的價值,你從舊版本的對象得到覆蓋的實際對象的屬性「還原」爲只有一個屬性的變化。

與一對多的關係映射有許多特性將導致數據庫負載,使計算更重。

我會使用可記錄的界面,在數據庫中存儲完整的對象,然後根據自己的需要改變你的應用程序中的表現。