PrestaShop - 根据 php 上的参考更新价格

PrestaShop - Update price by reference on php

我每天收到 JSON 价格,我必须在网站上更新这些价格。我可以正确阅读 json 和 php,但我不知道如何更新产品价格。我试过直接修改数据库,但没有成功。 objective 是找到每个有特定参考的产品(通常是一个产品,但可能有一些重复),然后更改价格。我从JSON、reference和price中读取了这两个数据。到目前为止,我创建了一个全新的 php 文件并且正在尝试:

include(dirname(__FILE__) . '/config/config.inc.php');
include(dirname(__FILE__) . '/init.php');
foreach ($json_datos as $articulo){
    $cod_articulo = $articulo["Cod_Articulo"]; //this comes from the previously read json
    $precio_articulo = $articulo["PVP"]; //this comes from the previously read json

    $query = "UPDATE `"._DB_PREFIX_."product` prod SET price=".$precio_articulo." WHERE prod.reference=".$cod_articulo.";";
    Db::getInstance()->Execute($query);
}

这段代码没有错误,也没有任何变化。

使用产品对象实现您的目标。

foreach ($json_datos as $articulo) {
    $cod_articulo = $articulo["Cod_Articulo"];
    $precio_articulo = $articulo["PVP"];

    $product = new Product(Product::getIdByReference($cod_articulo));
    $product->price = $precio_articulo;
    $product->update();
}

这种方式更安全稳定

更新: 对于低于 1.7.6 的版本,您需要定义自己的方法

include(dirname(__FILE__) . '/config/config.inc.php');

function getIdByReference($reference)
{
    if (empty($reference)) {
        return 0;
    }

    if (!Validate::isReference($reference)) {
        return 0;
    }

    $query = new DbQuery();
    $query->select('p.id_product');
    $query->from('product', 'p');
    $query->where('p.reference = \'' . pSQL($reference) . '\'');

    return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query);
}

foreach ($json_datos as $articulo) {
    $cod_articulo = $articulo["Cod_Articulo"];
    $precio_articulo = $articulo["PVP"];

    $product = new Product(getIdByReference($cod_articulo));
    $product->price = $precio_articulo;
    $product->update();
}

但在这种情况下,它有点失去意义。但是在产品对象中更新价格仍然更安全