假设有一个名为 Staff 的实体。
它具有许多持久属性,例如: - 姓名 - 经验 - 年龄
我想创建一个基于经验和年龄的“虚拟”属性,称为“薪水”。例如:$salary = ($experience + $age) * 100
但我不想保留 Salary 属性。原因是我想让 Salary 属性在年龄或经验值发生变化时自动更新。
我对此有两个问题:
- 实体文件是存储 getSalary() 函数的好地方吗?
- 如何做到这一点,以便每当调用员工实体时,薪水变量将填充基于年龄和经验计算的薪水?
实体文件是存储 getSalary() 函数的好地方吗?
是的。
并非实体中的每个字段都必须映射到数据库字段。
此外,实体可以包含简单的 getter 和 setter 以外的方法。IMO只要这些方法对实体字段进行操作,它们就属于实体。
如何做到这一点,以便每当调用员工实体时,薪水变量将填充基于年龄和经验计算的薪水?
您可以使用 Doctrine 的生命周期事件之一,例如 postLoad 事件,该事件在实体加载到实体管理器后调用。
请注意,您不必将计算结果存储在属性中。您的计算很简单,最好定义一个吸气剂。