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