- Posts: 2696
- Thank you received: 74
mettre a jour une table apres enregistrement d'un produit
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);
pourquoi le trigger n'a aucun effet alors que tout marche ?
merci pour l'aide
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.
7 years 1 month ago - 7 years 1 month ago #310347
by nicolas
Replied by nicolas on topic mettre a jour une table apres enregistrement d'un produit
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.
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.
7 years 1 month ago - 7 years 1 month ago #310381
by erickb
Replied by erickb on topic mettre a jour une table apres enregistrement d'un produit
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.
7 years 1 month ago - 7 years 1 month ago #310389
by erickb
Replied by erickb on topic mettre a jour une table apres enregistrement d'un produit
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
quest ce qui bloque ?
mon echo donne bien
46,47,48
si je recupere les requetes dans un echo et que je les execute directement dans la base tout marche
merci
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.
7 years 1 month ago - 7 years 1 month ago #310395
by erickb
Replied by erickb on topic mettre a jour une table apres enregistrement d'un produit
je vais faire autrement
merci
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.192 seconds