Opencart分别获取某个订单总计代码标题的值

Opencart get value of certain order totals code title separately

这可能是一个我很喜欢的复杂问题,我已经苦思冥想好几天了,没有解决方案,甚至 Google 也没有找到我的答案。在 opencart 中,您在名为 "order_totals" 的数据库中有一个 Table 结构如下:

默认情况下,Opencart 带有一个模型函数,该函数 return 是基于订单 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;
}

因此,如果您将函数与数据库的附件图像进行比较,它应该 return 4 项 "sub total, shipping rate, payment, total" 当看到 order_idorder_total_id[=25 时就很清楚了=]

我的问题是如何获得特定 codevalue 以将它们分别列在视图 table 中,如下所示

通常我们可以将 SQL 查询的过滤代码添加到 return 请求的值 例如,如果我想要 code shippingvalue 我可以使用以下代码:

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;
}

这将 return 运费所需的值,如果我们示例中的订单 ID 为 1

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

这很好,但是要获得运费、sub_total、付款和总计的价值,我需要创建多个分开的函数,我认为这不是一个有效的解决方案。

如何分别获取每个 codevalue 并将它们列在管理视图仪表板中?

谢谢!

您可以通过使用条件聚合直接用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 子句。