【问题标题】:CakePHP virtual fields with two tablesCakePHP 具有两个表的虚拟字段
【发布时间】:2013-05-15 21:02:17
【问题描述】:

我的网页中有两个表格: 订单:

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

我需要使用模型以某种方式链接这些表。 主要的是订单结果集应该包含一个虚拟字段,该字段将显示订单金额:SUM(amount*price)。我期待 Orders 表的结果:

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

有可能,还是受虚拟字段限制? 任何帮助或想法将不胜感激:)

【问题讨论】:

  • 我对你真正想要的结果感到困惑——你能澄清/简化一下吗?

标签: cakephp


【解决方案1】:

我不敢相信 :) 我已经设法解决了这个“问题”。

这是解决方案:我在 order_items 表中添加了另一个字段 - 总和它的值是 amount*price。这是 Order 模型中的 Virtual 字段:

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

希望对您有所帮助,祝您烘焙愉快 :)

【讨论】:

  • 我猜这不是理想的方法。
【解决方案2】:

您可以在订单表中保留一个“总计”字段,然后使用afterSave() 等回调方法更新金额。这样,您就不必每次都运行查询来检索和计算总数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多