【问题标题】:How to deal with calculated entity attribute如何处理计算的实体属性
【发布时间】:2013-06-01 18:39:00
【问题描述】:

假设有一个名为 Staff 的实体。

它具有许多持久属性,例如: - 姓名 - 经验 - 年龄

我想创建一个基于经验和年龄的“虚拟”属性,称为“薪水”。例如:$salary = ($experience + $age) * 100

但我不想保留 Salary 属性。原因是我想让 Salary 属性在年龄或经验值发生变化时自动更新。

对此我有两个问题:

  • 实体文件是存储 getSalary() 函数的好地方吗?
  • 我怎样才能使每当调用 Staff 实体时,薪水变量将填充根据年龄和经验计算的薪水?

【问题讨论】:

  • 为什么需要薪金变量?似乎 getSalary() 可以在需要时计算它。

标签: symfony doctrine entity


【解决方案1】:

实体文件是存储 getSalary() 函数的好地方吗?

是的。

并非实体中的每个字段都必须映射到数据库字段。

此外,实体可以包含简单的 getter 和 setter 以外的方法。 IMO 只要这些方法对实体字段进行操作,它们就属于实体。

我怎样才能使每当调用 Staff 实体时,薪水变量将填充根据年龄和经验计算的薪水?

您可以使用 Doctrine 的 lifecycle events 之一,例如 postLoad 事件,该事件在实体加载到实体管理器后调用。

请注意,您不必将计算结果存储在属性中。您的计算很简单,最好定义一个 getter。

【讨论】:

  • 我也这么认为,但不幸的是,DoctrineHydrator 出于某种原因没有绑定相关的表单字段。它仅在我保留实体属性时才有效 - 这是按单价和数量计算的“总”属性。 :(
猜你喜欢
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
相关资源
最近更新 更多