Prestafan33 Posted February 12, 2020 Share Posted February 12, 2020 (edited) Me ocurre algo rarísimo, que me tiene totalmente descolocado con la versión 1.7.6.1 de PS. Lo explico a continuación, a ver si a alguien se le ocurre cuál puede ser el motivo, porque a mí ya se me acaban las ideas: Lo que ocurre es lo que digo en el título, cuando se cambia la combinación por defecto de un producto, el cambio no se traslada a la base de datos. Para ser exactos, en la tabla de atributos sí que queda reflejada la nueva combinación por defecto, pero en las tablas de productos (ps_product y ps_product_shop), en el campo "cache_default_attribute" no se refleja el cambio. He rastreado el código de la clase Product y he visto que el cambio debería producirse en el método updateDefaultAttribute, cuyo código es éste: public static function updateDefaultAttribute($id_product) { $id_default_attribute = (int) Product::getDefaultAttribute($id_product, 0, true); $result = Db::getInstance()->update('product_shop', array( 'cache_default_attribute' => $id_default_attribute, ), 'id_product = ' . (int) $id_product . Shop::addSqlRestriction()); $result &= Db::getInstance()->update('product', array( 'cache_default_attribute' => $id_default_attribute, ), 'id_product = ' . (int) $id_product); if ($result && $id_default_attribute) { return $id_default_attribute; } else { return $result; } } El método se ejecuta al modificar el producto y el valor de $id_default_attribute que se obtiene en la primera línea del método es el correcto (lo he dumpeado), pero simplemente no se traslada a las tablas de la base de datos. Es más, he intentado forzarlo añadiendo esto dentro del método: $sql = 'UPDATE ps_product SET cache_default_attribute='.$id_default_attribute.' WHERE id_product='.$id_product; Db::getInstance()->execute($sql); exit(); ... pero simplemente no actualiza la base de datos y no se modifica el valor que tiene en la columna cache_default_attribute. Si ejecuto exactamente la misma consulta desde el PHPMyAdmin se realizan los cambios correctamente. ¿A alguien se le ocurre por qué puede ser? Edited February 12, 2020 by Prestafan33 (see edit history) Link to comment Share on other sites More sharing options...
Prestafan33 Posted February 12, 2020 Author Share Posted February 12, 2020 (edited) 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... Edited February 12, 2020 by Prestafan33 (see edit history) Link to comment Share on other sites More sharing options...
_Veronika_ Posted December 15, 2022 Share Posted December 15, 2022 Hola @Prestafan33 A mi me está pasando algo parecido en la versión 1.6.1.24, cuando actualizo manualmente la combinación por defecto porque queda a 0 por otra con stock, el cambio no se traslada a la base de datos y se sigue mostrando el mensajito Esta combinación no tiene stock. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now