22 hours ago, PtitKev said:L'erreur se situe dans la classe Cart, méthode duplicate(). La requête SQL remplissant la variable $product_gift est fausse.
SELECT cr.`gift_product`, cr.`gift_product_attribute` FROM `'._DB_PREFIX_.'cart_rule` cr LEFT JOIN `'._DB_PREFIX_.'order_cart_rule` ocr ON (ocr.`id_order` = '.(int)$this->id.') WHERE ocr.`id_cart_rule` = cr.`id_cart_rule`On peut noter que le LEFT JOIN et le WHERE sont incompatible mais l'erreur vient surtout de la condition de la jointure : "id_order" = "id_cart".
Sachant que dans un objet Cart on je fait jamais référence à une commande, la seule façon de trouver un "id_order" pour la table "order_cart_rule" est de passer par la table "orders".
J'ai donc reconstruit la requête de cette façon :
SELECT cr.`gift_product`, cr.`gift_product_attribute` FROM `'._DB_PREFIX_.'orders` o INNER JOIN `'._DB_PREFIX_.'order_cart_rule` ocr ON o.`id_order` = ocr.`id_order` INNER JOIN `'._DB_PREFIX_.'cart_rule` cr ON ocr.`id_cart_rule` = cr.`id_cart_rule` WHERE o.`id_cart` = '.(int)$this->idJ'ai constaté que le champ orders.id_cart n'avait pas d'index unique donc cette solution n'est pas, dans l'absolue, la bonne mais vu qu'on valide l’existence d'une commande pour un panier donné je considère qu'elle fera l'affaire
![]()
Comme disent les anglais : "et voilà !"
Dans la 1.7 cela a apparemment été corrigé : https://github.com/PrestaShop/PrestaShop/pull/8498