Search code examples
mysqlsqlprestashopdatabase-trigger

Sql trigger doesn't work but doesn't give any error


I made a trigger on prestashop to change the active attribute of a product when it's out of stock:

CREATE TRIGGER change_active AFTER UPDATE ON ps_stock_available
FOR EACH ROW
BEGIN
     UPDATE 
          ps_product_shop 
     SET 
          active=0 
     WHERE 
          id_product IN (SELECT id_product FROM ps_stock_available WHERE quantity=0);
END

And it doesn't give me any error so it should work but the active attribute never changes, even when I set a product's quantity to zero.

Edit: after many attempts, I found out my trigger wasn't called after the right update. Here is my code, it works perfectly now.

 CREATE TRIGGER `change_active_after_update` AFTER UPDATE ON `ps_product`
 FOR EACH ROW
 BEGIN
      UPDATE 
           ps_product_shop 
      SET 
           active=0 
      WHERE 
          id_product IN(SELECT id_product FROM ps_stock_available WHERE quantity=0);
END

Solution

  • Statment-Level Trigger:

    CREATE TRIGGER change_active ON ps_stock_available
    FOR UPDATE
    BEGIN
         UPDATE 
              ps_product_shop 
         SET 
              active=0
         FROM
            inserted
         WHERE 
              ps_product_shop.id_product = inserted.id_product and
              inserted.quantity=0;
    END
    

    Row-Level Trigger:

    CREATE TRIGGER change_active BEFORE UPDATE ON ps_stock_available
    FOR EACH ROW
    BEGIN
    
    IF(NEW.quantity = 0) THEN
         UPDATE 
              ps_product_shop 
         SET 
              active=0
         WHERE 
              ps_product_shop.id_product = NEW.id_product;
    END IF;
    END