Jump to content

Edit History

Prestafan33

Prestafan33

Bueno, pues después de un montón de tiempo investigando, no he podido dar con la causa. He tenido que improvisar una solución de emergencia, que ha sido hacer un override del método "update" de la clase Product para, una vez el producto se ha actualizado, forzar la actualización del campo "cache_default_attribute" en las tablas de producto:

/* Fuerza la actualización de la combinación por defecto al actualizar un producto */
class Product extends ProductCore
{
  public function update($null_values = false)
  {
    $return = parent::update($nul_values);
    
    $id_default_attribute = (int) Product::getDefaultAttribute($this->id, 0, true);
    if ($id_default_attribute) {
      $databaseInstance = Db::getInstance();
      $sql = 'UPDATE `ps_product_shop` SET `cache_default_attribute`='.$id_default_attribute.' WHERE `id_product`='.$this->id.' AND `id_shop`='.$this->id_shop_default;
      $databaseInstance->execute($sql);
      $sql = 'UPDATE `ps_product` SET `cache_default_attribute`='.$id_default_attribute.' WHERE `id_product`='.$this->id;
      $databaseInstance->execute($sql);
    }

    return $return;
  }
}

Así he conseguido que se actualice. Sin embargo, colocando las mismas consultas dentro de los métodos updateDefaultAttribute() y updateAttribute() no he conseguido que funcione (de hecho, ya se realizan ahí por defecto los UPDATES, pero sin ningún resultado en la base de datos).

Si a alguien se le ocurre cuál puede ser el motivo, encantado de experimentar lo que sea...

Prestafan33

Prestafan33

Bueno, pues después de un montón de tiempo investigando, no he podido dar con la causa. He tenido que improvisar una solución de emergencia, que ha sido hacer un override del método "update" de la clase Product para, una vez el producto se ha actualizado, forzar la actualización del campo "cache_default_attribute" en las tablas de producto:

/* Fuerza la actualización de la combinación por defecto al actualizar un producto */
class Product extends ProductCore
{
  public function update($null_values = false)
  {
    $return = parent::update($nul_values);
    
    $id_default_attribute = (int) Product::getDefaultAttribute($this->id, 0, true);
    if ($id_default_attribute) {
      $databaseInstance = Db::getInstance();
      $sql = 'UPDATE `ps_product_shop` SET `cache_default_attribute`='.$id_default_attribute.' WHERE `id_product`='.$this->id.' AND `id_shop`=1';
      $databaseInstance->execute($sql);
      $sql = 'UPDATE `ps_product` SET `cache_default_attribute`='.$id_default_attribute.' WHERE `id_product`='.$this->id;
      $databaseInstance->execute($sql);
    }

    return $return;
  }
}

Así he conseguido que se actualice. Sin embargo, colocando las mismas consultas dentro de los métodos updateDefaultAttribute() y updateAttribute() no he conseguido que funcione (de hecho, ya se realizan ahí por defecto los UPDATES, pero sin ningún resultado en la base de datos).

Si a alguien se le ocurre cuál puede ser el motivo, encantado de experimentar lo que sea...

Prestafan33

Prestafan33

Bueno, pues después de un montón de tiempo investigando, no he podido dar con la causa. He tenido que improvisar una solución de emergencia, que ha sido hacer un override del método "update" de la clase Product para, una vez el producto se ha actualizado, forzar la actualización del campo "cache_default_attribute" en las tablas de producto:

/* Fuerza la actualización de la combinación por defecto al actualizar un producto */
class Product extends ProductCore
{
  public function update($null_values = false)
  {
    $return = parent::update($nul_values);
    
    $id_default_attribute = (int) Product::getDefaultAttribute($this->id, 0, true);
    if ($id_default_attribute) {
      $sql = 'UPDATE `ps_product_shop` SET `cache_default_attribute`='.$id_default_attribute.' WHERE `id_product`='.$this->id.' AND `id_shop`=1';
      $databaseInstance = Db::getInstance();
      $databaseInstance->execute($sql);
      $sql = 'UPDATE `ps_product` SET `cache_default_attribute`='.$id_default_attribute.' WHERE `id_product`='.$this->id;
      $databaseInstance->execute($sql);
    }

    return $return;
  }
}

Así he conseguido que se actualice. Sin embargo, colocando las mismas consultas dentro de los métodos updateDefaultAttribute() y updateAttribute() no he conseguido que funcione (de hecho, ya se realizan ahí por defecto los UPDATES, pero sin ningún resultado en la base de datos).

Si a alguien se le ocurre cuál puede ser el motivo, encantado de experimentar lo que sea...

×
×
  • Create New...