【问题标题】:How to calculate price value and tax value in query如何在查询中计算价格值和税值
【发布时间】:2013-11-03 11:42:33
【问题描述】:

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

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'))

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

超频:v1.5.6

【问题讨论】:

    标签: mysql opencart


    【解决方案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']);
        }
    }
    

    【讨论】:

    • 太棒了,谢谢 :D,我希望在解决这个问题后我会为 opencart 发布免费扩展。
    猜你喜欢
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    相关资源
    最近更新 更多