这可能是一个非常复杂的问题,我已经连续数天没有解决任何问题,甚至Google都找不到我的答案。在opencart中,数据库中有一个名为“ order_totals”的表,其结构如下:

php - Opencart分别获取某个订单的值(value)总计代码标题-LMLPHP

默认情况下,Opencart带有一个Model函数,该函数根据订单ID返回订单总数,例如order_id = '1'

public function getOrderTotals($order_id) {
    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$order_id . "' ORDER BY sort_order");

    return $query->rows;
}


因此,如果将函数与数据库的附件图像进行比较,它应该返回4个项目“小计,运费,付款,总计”,当您看到order_idorder_total_id

我的问题是如何获取特定valuecode以便分别在视图表中列出它们,如下所示

php - Opencart分别获取某个订单的值(value)总计代码标题-LMLPHP

通常我们可以在SQL查询中添加过滤代码以返回请求的值
例如,如果我想要value codeshipping,则可以使用以下代码:

public function getOrderTotals($order_id) {
    $query = $this->db->query("SELECT value FROM " . DB_PREFIX . "order_total WHERE code = 'shipping' AND order_id = '" . (int)$order_id . "' ORDER BY sort_order");

    return $query->rows;
}


在我们示例的订单ID为1的情况下,这将返回Shipping所需的值


  array(1){[0] => array(1){[“” value“] => string(6)” 5.0000“}}


但是,要获得运输,小计,付款和总计的价值,那太好了,我需要创建多个分开的功能,但我认为这不是一个有效的解决方案。

如何分别获取每个valuecode并将它们列出在Admin View仪表板中?

谢谢!

最佳答案

您可以使用条件聚合直接使用SQL生成预期结果。

考虑:

SELECT
    order_id,
    MAX(CASE WHEN code = 'sub_total'         THEN value END) sub_total,
    MAX(CASE WHEN code = 'shipping'          THEN value END) flat_shipping_rate,
    MAX(CASE WHEN code = 'payment_based_fee' THEN value END) payment,
    MAX(CASE WHEN code = 'total'             THEN value END) total
FROM order_totals
GROUP BY order_id


如果需要过滤特定的order_id,则可以在查询中添加WHERE子句。

关于php - Opencart分别获取某个订单的值(value)总计代码标题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57983498/

10-17 01:02