如何计算查询中的价格值和税值

时间:2013-11-03 11:42:33

标签: mysql opencart

我尝试在客户插入最小值和最大值时过滤产品价格。

product.php

public function getProducts($data = array()) {
....

if (!empty($data['min'])) {
    $sql .= " AND p.price BETWEEN '" .$data['min']. "' AND 9999 ";
}

使用此代码,类别页面将列出从价格x到9999的所有产品。

问题是某些产品有tax,而值存储在另一个表(oc_tax_rate)中。 那么如何在查询中获得产品的最终价格? (p.price + tax),如下所示:

if (!empty($data['min'])) {
    $sql .= " AND final_price BETWEEN '" .$data['min']. "' AND 9999 ";
}

当我检查页面控制器/ category.php

$this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax'))

以上代码将返回最终价格。

OC:v1.5.6

1 个答案:

答案 0 :(得分:1)

首先,当您使用minmax过滤器值时,您的查询不应该选择between min and 9999between 0 and max,但您应该这样做:

if (!empty($data['min'])) {
    $sql .= " AND p.price >= " . (int)$data['min'];
//                               ^^^^^ - against SQL injection!!!
}

if (!empty($data['max'])) {
    $sql .= " AND p.price <= " . (int)$data['max'];
//                               ^^^^^ - against SQL injection!!!
}

另外,正如评论中所提到的,不要忘记治愈你的代码反对SQL注入!

现在,对于您真正的问题:无法获得税收并计算纳税价格以及产品进入一个查询。但你可以在你的模型中做到这一点 - 找到这部分代码

foreach ($query->rows as $result) {
    $product_data[$result['product_id']] = $this->getProduct($result['product_id']);
}

我们会这样修改:

foreach ($query->rows as $result) {
    if (!empty($data['min']) 
            && $this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')) >= $data['min']) {
        $product_data[$result['product_id']] = $this->getProduct($result['product_id']);
    } else if (!empty($data['max']) 
            && $this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')) <= $data['max']) {
        $product_data[$result['product_id']] = $this->getProduct($result['product_id']);
    } else {
        $product_data[$result['product_id']] = $this->getProduct($result['product_id']);
    }
}