Prestashop - 哪个 SQL 在 actionProductUpdate 之后调用?

Prestashop - Which SQL called after actionProductUpdate?

我在更新产品库存时尝试从 ps_product 更新 name。我在挂钩 actionProductUpdate.

上添加了一个 SQL 请求

挂钩有效,因为当我在 SQL 之后设置 die; 时,数据库会更新。

但是不知道在哪里,又调用了一个SQL,设置回原来的值。我使用 PROFILING,我看到它是在....

之后调用的

如何将此调用设置为保存产品更新后要做的最后一件事?

这是简化的代码:

public function hookActionProductUpdate($params)
{
    $product = $params['product'];

    $sql = 'UPDATE ' . _DB_PREFIX_ . 'product mp 
            SET mp.name = ''
            WHERE mp.id_product = ' . $product->id;

    Db::getInstance()->execute($sql);

}

PS :如果我更改另一个参数,如 reference,这次它起作用了!

"name" 字段在 "ps_product_lang" table.

您必须为每种语言重命名产品。

最好使用对象产品来实现您的目标。像

public function hookActionObjectProductUpdateAfter($params)
{
    $product = new Product($params['object']->id);
    foreach(Language::getLanguages(true) as $language) {
        $product->name[$language['id_lang']] = 'new name';
    }
    $product->update();
}

在这种情况下,您不关心名称保存在数据库中的什么位置,也永远不会损坏它

PS :如果你想得到'product',请注意参数。在 actionProductUpdate 中,它是 params['product'] 但在 hookActionObjectProductUpdateAfter 中它是 params['object'](作为 Product)。我在这上面浪费了很多时间...