我感到困惑如何去增加功能,以我的實體。添加功能Symfony2的實體
說我有增加收費表。我的數據庫表有這些領域
- COMPANY_ID
- 日期
- 量
,我已經在我的Symfony2項目做了相應的FeeIncrease
實體。
現在,我的應用程序的一部分,我需要顯示的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
屬性到我的FeeIncrease
實體。 getPreviousAmount
將是一個爲我完成複雜查詢的方法。但是我怎樣才能添加這個方法並使其能夠利用Doctrine的功能?例如,假設我用->findAll()
獲得的加費的數組。然後,在我的模板,我通過數組迭代,但每個費增加我顯示前一個量:
{% for feeIncrease in feeIncreases %}
{{ feeInrease.previousAmount }}
{% endfor %}
這將導致另一個數據庫調用,每個增加。考慮到我想要顯示的收費數量,這對我來說是無法使用的。
任何指針將不勝感激。
UPDATE:
這裏就是我在談論的一個例子。
我上面描述的費用增加與合同有關。每份合同都有很多費用的增加。每個月,每個合約都有一個「當前」的費用,這是由以下規則發現:
- 如果合同有新的費用增加是本月起,使用量。
- 如果合約的收費在當月結束,而不是另一個跟進,則使用該金額。
還有其他規則。所以我的問題是,我可以在哪裏放置這些規則,以便當我實際使用我的contract
和feeIncrease
對象時,我可以使用像contract.currentFee
這樣的方法,而無需在所有地方添加所有這些邏輯?
你爲什麼不能救'previous_amount'創建存儲庫的實體作爲一個領域? – Inoryy
我沒有控制數據庫。還有其他幾種我需要這種功能的情況。 –