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