mettre a jour une table apres enregistrement d'un produit

  • Posts: 2285
  • Thank you received: 52
  • Hikashop Business
3 weeks 3 days ago #310340

-- 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);

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: 3 weeks 2 days ago by erickb.

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

  • Posts: 66889
  • Thank you received: 9887
  • MODERATOR
3 weeks 2 days ago #310347

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: 3 weeks 2 days ago by nicolas.

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

  • Posts: 2285
  • Thank you received: 52
  • Hikashop Business
3 weeks 2 days ago #310381

j'ai vais essayer un plugin

Last edit: 3 weeks 1 day ago by erickb.

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

  • Posts: 2285
  • Thank you received: 52
  • Hikashop Business
3 weeks 1 day ago #310389

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

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
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: 3 weeks 1 day ago by erickb.

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

  • Posts: 2285
  • Thank you received: 52
  • Hikashop Business
3 weeks 1 day ago #310395

je vais faire autrement

merci

Last edit: 3 weeks 15 hours ago by erickb.

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

Time to create page: 0.068 seconds
Powered by Kunena Forum