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)。我在这上面浪费了很多时间...
我在更新产品库存时尝试从 ps_product
更新 name
。我在挂钩 actionProductUpdate
.
挂钩有效,因为当我在 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)。我在这上面浪费了很多时间...