2013-05-15 45 views
0

CakePHP的虛擬領域我已經在我的網頁兩個表: 訂單:兩個表

id int(11) NOT NULL AUTO_INCREMENT,  
created datetime NOT NULL, 
payed datetime DEFAULT NULL, 
PRIMARY KEY (`id`) 

和ORDER_ITEMS:

id int(11) NOT NULL AUTO_INCREMENT, 
orders_id int(11) NOT NULL, 
amount int(11) NOT NULL, 
price float NOT NULL, 
PRIMARY KEY (`id`) 

一個訂單可能有許多ORDER_ITEMS。 的示例記錄,訂單:

id, created, payed 
14, '2013-05-14 22:40:49', NULL 
15, '2013-05-14 22:41:03', NULL 

ORDER_ITEMS:

id, orders_id, amount, price 
12, 14, 1, 5 
13, 15, 6, 5 

我需要以某種方式連接使用Model這些表。 最重要的是訂單結果集應該包含一個顯示訂單金額的虛擬字段:SUM(金額*價格)。我期待Orders表的結果:

id, created, payed, order_sum 
14, '2013-05-14 22:40:49', NULL, 5 
15, '2013-05-14 22:40:49', NULL, 30 

是否有可能,或者它受虛擬域限制的限制? 任何幫助或想法,將不勝感激:)

+0

我很困惑,你真的希望你的結果是 - 你能澄清/簡化嗎? – Dave

回答

0

我不能相信它:)我設法解決這個「問題」。

這裏是解決方案:我已經在order_items表中添加了另一個字段 - 總計它具有金額*價格。這裏是在訂貨型號虛擬領域:

 public $virtualFields = array(
      'amount_price'=>' 
       SELECT SUM(sum) 
       FROM order_items 
       where (orders_id = `Order`.`id`) 
       GROUP by orders_id' 

希望它能幫助,快樂烘焙:)

+0

我的猜測是這不是執行此操作的理想方法。 – Dave

0

你可以在你的訂單表中的「總」字段,然後使用一個回調方法類似afterSave()更新金額。這樣,您就不必運行查詢來檢索並計算每次總計。