这可能是一个非常复杂的问题,我已经连续数天没有解决任何问题,甚至Google都找不到我的答案。在opencart中,数据库中有一个名为“ order_totals”的表,其结构如下:
默认情况下,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_id
和order_total_id
我的问题是如何获取特定
value
的code
以便分别在视图表中列出它们,如下所示通常我们可以在SQL查询中添加过滤代码以返回请求的值
例如,如果我想要
value
code
的shipping
,则可以使用以下代码: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“}}
但是,要获得运输,小计,付款和总计的价值,那太好了,我需要创建多个分开的功能,但我认为这不是一个有效的解决方案。
如何分别获取每个
value
的code
并将它们列出在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/