我对如何为我的实体添加功能感到困惑。
假设我有一张费用增加表。我的数据库表有这些字段
- company_id
- 日期
- 数量
我已经FeeIncrease
在我的 Symfony2 项目中创建了相应的实体。
现在,对于我的应用程序的一部分,我需要显示HTML
一个特定月份发生的所有费用增加的表格。该表将包含数据库表中的所有字段,但还将包含一个附加字段:先前的费用金额。像这样的东西:
company_id | date | amount | previous_amount
-----------+------------+--------+----------------
1 | 2013-02-03 | 500 | 400
3 | 2013-02-15 | 1000 | 800
8 | 2013-02-20 | 1100 | 500
从数据库的角度考虑,每一行都需要一个从表中选择最新费用增加的子查询(即,它查询当前增加日期之前的最新日期的费用增加)。
目前我正在使用Native SQL编写子查询,但业务逻辑的复杂性已经表明这不是一个长期的解决方案。不同的页面需要不同的“where”子句,所以我将为每个页面编写一个新查询。此外,还有更多逻辑需要应用于字段本身,我更愿意将此逻辑封装在其他对象中,而不是像现在这样让它漂浮在我的控制器和视图周围。
我的问题本质上是,如何向我的实体添加依赖于实体数据的额外属性?
理想情况下,我会向我的实体添加一个$previousAmount
属性。将是一种为我进行复杂查询的方法。但是我怎样才能添加这个方法并让它利用 Doctrine 的功能呢?例如,假设我用来获得一系列费用增加。然后,在我的模板中,我遍历数组,但是对于每次费用增加,我都会显示之前的金额:FeeIncrease
getPreviousAmount
->findAll()
{% for feeIncrease in feeIncreases %}
{{ feeInrease.previousAmount }}
{% endfor %}
对于每次增加,这将导致另一个数据库调用。考虑到我想显示的费用增加次数,这在我的情况下是不可用的。
任何指针将不胜感激。
更新:
这是我正在谈论的一个例子。
我上面描述的费用增加与合同有关。每份合同都有很多费用增加。每个月,每份合约都有一个“当前”费用,由以下规则确定:
- 如果合同从该月开始有新的费用增加,请使用该金额。
- 如果一份合同在该月结束时增加了费用,而不是后续的另一份,则使用该金额。
还有其他规则。所以我的问题是,我可以把这些规则放在哪里,这样当我实际使用我的contract
和feeIncrease
对象时,我可以使用类似的方法,contract.currentFee
而不必在任何地方添加所有这些逻辑?