Skip to main content

mettre a jour une table apres enregistrement d'un produit

More
7 years 1 month ago - 7 years 1 month ago #310340 by erickb
trigger ne marche pas was created by erickb
-- HikaShop version -- : 4.2.1

Bonjour

j'ai cree un trigger qui marche parfaitement si je le fais sur une copie exacte de la table hikashop_product_category mais qui est sans effet sur la table elle meme et je ne comprend vraiment pas ce qui peut bloquer

quand mon champ hikashot_product.product_size_values change je met a jour hikashop_product_category

si mon hikashop_product.product_size_values = '41,42,46'
je rentre 3 lignes dans hikashop_product_category
(product_id, category_id) values (new.product_id, 441);
(product_id, category_id) values (new.product_id, 442);
(product_id, category_id) values (new.product_id, 446);

Code:
CREATE TRIGGER trg_product_size AFTER UPDATE ON fr_hikashop_product FOR EACH ROW BEGIN DECLARE x INT; IF (new.product_size_values != OLD.product_size_values) THEN DELETE FROM fr_hikashop_product_category WHERE product_id = new.product_id AND category_id BETWEEN 441 AND 448; set x = 41 ; while x < 49 do if LOCATE(x, new.product_size_values) > 0 then INSERT IGNORE INTO fr_hikashop_product_category (product_id, category_id) values (new.product_id, CONCAT('4',x )); end if; set x=x+1; end while ; END IF; END //

pourquoi le trigger n'a aucun effet alors que tout marche ?
merci pour l'aide
Last edit: 7 years 1 month ago by erickb.

Please Log in or Create an account to join the conversation.

More
7 years 1 month ago - 7 years 1 month ago #310347 by nicolas
Bonjour,

Pour appeler une procédure stockée après l'enregistrement d'un produit, il vous faut utiliser un trigger MySQL:
stackoverflow.com/questions/44745097/mys...ting-new-row-in-tabl
Mais bon, les procédures stockées associées à des triggers sont déconseillées d'après ce que je lis sur internet. Et je ne saurais vous aider sur le sujet. Je n'ai jamais fair de trigger MySQL de ma vie, donc vous en savez déjà plus que moi sur le sujet.

Je pense aussi que c'est possible de faire cela avec une action de masse:
monosnap.com/file/b4V3vUtgByP7syPE0GCMR2ThCkzUyx
Sinon, il est je pense préférable de faire un petit plugin implémentant onAfterProductCreate et onAfterProductUpdate pour faire votre requête d'INSERT MySQL.
Last edit: 7 years 1 month ago by nicolas.

Please Log in or Create an account to join the conversation.

More
7 years 1 month ago - 7 years 1 month ago #310381 by erickb
j'ai vais essayer un plugin
Last edit: 7 years 1 month ago by erickb.

Please Log in or Create an account to join the conversation.

More
7 years 1 month ago - 7 years 1 month ago #310389 by erickb
mon plugin n'a absolument aucun effet alors qu'il marche si je met a jour n'importe quoi d'autre, et si je récupère les requetes générées et les colle dans phpmyadmin tout marche
Code:
class plgHikashopSynchro extends JPlugin { function __construct(&$subject, $config) { parent::__construct($subject, $config); } function onAfterProductUpdate(&$product) { $this->_productSynchro($product); } function onAfterProductCreate(&$product) { $this->_productSynchro($product); } function _productSynchro(&$product) { $s = ''; $pid = $product->product_id; $psize = explode(',',$product->product_size_values); //$pquantity = $product->product_quantity; $cat_parentid = 400; $catid = $cat_parentid; $db = JFactory::getDbo(); $query = $db->getQuery(true); $conditions = array( $db->quoteName('category_parent_id') . ' = ' .$cat_parentid, $db->quoteName('product_id') . ' = ' . $pid ); $query->delete($db->quoteName('#__hikashop_product_category')); $query->where($conditions); $db->setQuery($query); $db->execute(); $s .= $query . '<br />'; $query->clear; $columns = array('product_id', 'category_id', 'category_parent_id'); foreach($psize as $ps){ $catid += $ps; $values = array($pid, $catid, $cat_parentid); $query = $db->getQuery(true); $query ->insert($db->quoteName('#__hikashop_product_category')) ->columns($db->quoteName($columns)) ->values(implode(',', $values)); $db->setQuery($query); $query = str_replace('INSERT', 'INSERT IGNORE', $query); $db->setQuery($query); try { $db->execute(); } catch (Exception $e) { echo $e->getMessage() . $query; } $s .= $query . '<br />'; $query->clear; $catid = $cat_parentid; } echo $product->product_size_values; echo '<br />'; echo $s; } }

quest ce qui bloque ?

mon echo donne bien

46,47,48
Code:
DELETE FROM `#__hikashop_product_category` WHERE `category_parent_id` = 400 AND `product_id` = 60 INSERT IGNORE INTO `#__hikashop_product_category` (`product_id`,`category_id`,`category_parent_id`) VALUES (60,446,400) INSERT IGNORE INTO `#__hikashop_product_category` (`product_id`,`category_id`,`category_parent_id`) VALUES (60,447,400) INSERT IGNORE INTO `#__hikashop_product_category` (`product_id`,`category_id`,`category_parent_id`) VALUES (60,448,400)

si je recupere les requetes dans un echo et que je les execute directement dans la base tout marche


merci
Last edit: 7 years 1 month ago by erickb.

Please Log in or Create an account to join the conversation.

More
7 years 1 month ago - 7 years 1 month ago #310395 by erickb
je vais faire autrement

merci
Last edit: 7 years 1 month ago by erickb.

Please Log in or Create an account to join the conversation.

Time to create page: 0.172 seconds
Powered by Kunena Forum