2013-06-01 26 views
3

假設有一個名爲Staff的實體。如何處理計算的實體屬性

它有一些持續性的屬性,如: - 名稱 - 體驗 - 年齡

我想創建一個「虛擬」的屬性,是基於經驗和年齡,被稱爲「工資」。例如:$ salary =($ experience + $ age)* 100

但我不想保留Salary屬性。原因是我想讓Salary屬性在年齡或經驗值發生變化時自動更新。

我有這方面的兩個問題:

  • 是實體文件的好地方來存儲的getSalary()函數?
  • 我該如何做到這一點,以便每當一個職員實體被調用時,工資變量將充滿根據年齡&經驗計算的工資?
+0

爲什麼你需要薪水變量?似乎getSalary()只要需要就可以計算它。 – Cerad

回答

6

實體文件是存放getSalary()函數的好地方嗎?

是的。

並非實體中的每個字段都必須映射到數據庫字段。

此外,實體可以包含簡單的getter和setter方法以外的方法。 IMO只要這些方法在實體字段上運行,它們就屬於該實體。

我怎樣才能讓這個每當員工實體被稱爲,工資變量將充滿了基於年齡&經驗計算的工資是多少?

您可以使用Doctrine的lifecycle events之一,例如postLoad事件,在實體加載到實體管理器後調用該事件。

請注意,您不必將計算結果存儲在屬性中。你的計算很簡單,定義一個getter可能會更好。

+0

謝謝你的回答。 –

+0

我以爲一樣,但不幸的是DoctrineHydrator出於某種原因沒有綁定關聯的表單域。只有堅持實體屬性 - 即按單價和數量計算的「全部」屬性,它纔有效。 :( – smozgur