PrestaMO Posted August 12, 2015 Share Posted August 12, 2015 Bonjour, je suis entrain de réaliser un module qui géré les devis pour une application multishop. le probleme c'est que j'arrive pas à inserer les données dans ma table "ps_devis_shop" alors que ça marche pour "ps_devis_lang". et quand je met un die() apres l'insertion sur la table shop. voici un bout de code que j'ai modifier dans la methode add. // Database insertion for multishop fields related to the object if (Shop::isTableAssociated($this->def['table'])) { $fields = $this->getFieldsShop(); $fields[$this->def['primary']] = (int)$this->id; foreach ($id_shop_list as $id_shop) { $fields['id_shop'] = (int)$id_shop; $result &= Db::getInstance()->insert($this->def['table'].'_shop', $fields, $null_values); } } die(); if (!$result) return false; // Database insertion for multilingual fields related to the object if (!empty($this->def['multilang'])) { $fields = $this->getFieldsLang(); if ($fields && is_array($fields)) { $shops = Shop::getCompleteListOfShopsID(); $asso = Shop::getAssoTable($this->def['table'].'_lang'); foreach ($fields as $field) ..... j'ai fait un test sur l'insertion et j'ai recu le msg Duplicate entry '9-2' for key 'PRIMARY' INSERT INTO `ps_devis_shop` (`id_devis`, `montant`, `id_product`, `id_country`, `date_debut`, `date_fin`, `date_creation`, `id_shop`) VALUES ('9', '53.914412', '5', '45', '2015-07-11 10:34:00', '2015-08-21', '2015-07-11 10:34:00', '2') merci pour votre aide Link to comment Share on other sites More sharing options...
Prest guest Posted August 12, 2015 Share Posted August 12, 2015 j'ai le même probleme ma version est 1.6.1.0 Link to comment Share on other sites More sharing options...
Eolia Posted August 12, 2015 Share Posted August 12, 2015 Ben le message d'erreur est clair, l'insertion échoue car vous avez déjà une devis avec cet id_devis(9) pour cet id_shop(2). Vous avez une clé d'unicité sur ces 2 colonnes. Link to comment Share on other sites More sharing options...
Zouheir Posted August 12, 2015 Share Posted August 12, 2015 (edited) j'ai verifié mais c'est pas la cause, quand je met un die() apres la condition sur le multishop je recoi les insertion avec la duplication des id, c'est le principe de multishop. le probleme peut etre est du à autre chose Edited August 12, 2015 by Zouheir (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted August 12, 2015 Share Posted August 12, 2015 Euh non, en multishop, chaque enregistrement à l'id_shop du magasin correspondant, pas le même id_shop pour tous. Donc, 9 - 1, 9 - 2, etc... Link to comment Share on other sites More sharing options...
Zouheir Posted August 12, 2015 Share Posted August 12, 2015 et pourquoi ça a marché quand j'ai mi un die() après la condition "if (Shop::isTableAssociated($this->def['table']))". vous avez un tuto qui décrit cette configuration? Merci Link to comment Share on other sites More sharing options...
Eolia Posted August 12, 2015 Share Posted August 12, 2015 Je n'en sais rien, je n'ai pas tout votre code, je ne sais pas pourquoi vous utilisez $result par référence (&=), si l'insertion c'est bien passée après le die() et que vous n'avez pas effacé les données en table, vous vous retrouvez avec des doublons... Ca fait pas mal d'éléments inconnus. Un tuto chez Prestashop c'est 1 400€ ( https://www.prestashop.com/fr/formation-developpeur-prestashop ) pour le reste il faut décortiquer le code existant, pas d'autre solution 1 Link to comment Share on other sites More sharing options...
PrestaMO Posted August 12, 2015 Author Share Posted August 12, 2015 j'ai rien changer dans la methode add() j'ai juste mettre un die() après la condition qui inséré dans la table ps_devis_shop et ça a marche mais sans faire cela il n’insère rien ou bien il fait un rollback Link to comment Share on other sites More sharing options...
J. Danse Posted August 12, 2015 Share Posted August 12, 2015 Bonsoir Zouheir/PrestaMO (?!), Ce qu'Eolia essaie de vous dire, c'est que vous avez un soucis éventuellement avec la structure de vos tables et les clés qui y sont définies. Il faudrait commencer par voir cette structure de votre table. Est-il possible pour vous d'exporter la structure (le script de création de la table) et nous le montrer, afin de pouvoir affirmer ou non si le problème survient de là ? Link to comment Share on other sites More sharing options...
Eolia Posted August 13, 2015 Share Posted August 13, 2015 Pourquoi changer de pseudo à chaque post ? Link to comment Share on other sites More sharing options...
Oron Posted August 13, 2015 Share Posted August 13, 2015 (edited) Bonjour Merci de ne pas utiliser plusieurs pseudos, vous choisissez un pseudo et nous supprimons les autres. Merci de vous conformer aux règles du forum, l'usage de pseudo multiple peux vous valoir un bannissement. Bonjour, je suis entrain de réaliser un module qui géré les devis pour une application multishop. le probleme c'est que j'arrive pas à inserer les données dans ma table "ps_devis_shop" alors que ça marche pour "ps_devis_lang". et quand je met un die() apres l'insertion sur la table shop. voici un bout de code que j'ai modifier dans la methode add. // Database insertion for multishop fields related to the object if (Shop::isTableAssociated($this->def['table'])) { $fields = $this->getFieldsShop(); $fields[$this->def['primary']] = (int)$this->id; foreach ($id_shop_list as $id_shop) { $fields['id_shop'] = (int)$id_shop; $result &= Db::getInstance()->insert($this->def['table'].'_shop', $fields, $null_values); } } die(); if (!$result) return false; // Database insertion for multilingual fields related to the object if (!empty($this->def['multilang'])) { $fields = $this->getFieldsLang(); if ($fields && is_array($fields)) { $shops = Shop::getCompleteListOfShopsID(); $asso = Shop::getAssoTable($this->def['table'].'_lang'); foreach ($fields as $field) ..... j'ai fait un test sur l'insertion et j'ai recu le msg Duplicate entry '9-2' for key 'PRIMARY' INSERT INTO `ps_devis_shop` (`id_devis`, `montant`, `id_product`, `id_country`, `date_debut`, `date_fin`, `date_creation`, `id_shop`) VALUES ('9', '53.914412', '5', '45', '2015-07-11 10:34:00', '2015-08-21', '2015-07-11 10:34:00', '2') merci pour votre aide j'ai le même probleme ma version est 1.6.1.0 j'ai verifié mais c'est pas la cause, quand je met un die() apres la condition sur le multishop je recoi les insertion avec la duplication des id, c'est le principe de multishop. le probleme peut etre est du à autre chose et pourquoi ça a marché quand j'ai mi un die() après la condition "if (Shop::isTableAssociated($this->def['table']))". vous avez un tuto qui décrit cette configuration? Merci j'ai rien changer dans la methode add() j'ai juste mettre un die() après la condition qui inséré dans la table ps_devis_shop et ça a marche mais sans faire cela il n’insère rien ou bien il fait un rollback Edited August 13, 2015 by Oron (see edit history) Link to comment Share on other sites More sharing options...
Zouheir Posted August 13, 2015 Share Posted August 13, 2015 (edited) No c'est juste que je me connecte sur deux postes. Voici mon code: Schema de la base pour les trois tables CREATE TABLE IF NOT EXISTS `ps_devis` ( `id_devis` int(10) unsigned NOT NULL, `id_shop_default` int(10) NOT NULL DEFAULT '1', `montant` decimal(20,6) NOT NULL DEFAULT '0.000000', `id_product` int(11) unsigned NOT NULL, `id_country` int(11) unsigned NOT NULL, `date_creation` datetime NOT NULL, `date_debut` datetime NOT NULL, `date_fin` datetime NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- -- Structure de la table `ps_devis_lang` -- CREATE TABLE IF NOT EXISTS `ps_devis_lang` ( `id_devis` int(10) unsigned NOT NULL, `id_lang` int(10) unsigned NOT NULL, `id_shop` int(10) unsigned NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Structure de la table `ps_devis_shop` -- CREATE TABLE IF NOT EXISTS `ps_devis_shop` ( `id_devis` int(10) NOT NULL, `id_shop` int(10) NOT NULL, `montant` decimal(20,6) NOT NULL DEFAULT '0.000000', `id_product` int(11) NOT NULL, `id_country` int(11) NOT NULL, `date_creation` datetime NOT NULL, `date_debut` datetime NOT NULL, `date_fin` datetime NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- Index pour la table `ps_devis` -- ALTER TABLE `ps_devis` ADD PRIMARY KEY (`id_devis`); -- -- Index pour la table `ps_devis_lang` -- ALTER TABLE `ps_devis_lang` ADD PRIMARY KEY (`id_devis`,`id_lang`,`id_shop`); -- -- AUTO_INCREMENT pour la table `ps_devis` -- ALTER TABLE `ps_devis` MODIFY `id_devis` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=6; Et pour la classe DevisManage.php <?php class DevisManage extends ObjectModel { /** @var string Name */ public $montant; /** @var int default Shop id */ public $id_shop_default; public $id_product; public $id_country; public $date_debut; public $date_fin; public $date_creation; public $destination; /** * @see ObjectModel::$definition */ public static $definition = array( 'table' => 'devis', 'primary' => 'id_devis', 'multilang' => true, 'multilang_shop' => true, 'fields' => array( /* classic fields */ 'id_shop_default' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'), 'montant' => array('type' => self::TYPE_FLOAT, 'shop' => true, 'validate' => 'isPrice', 'required' => false), 'id_product' => array('type' => self::TYPE_INT, 'shop' => true,'validate' => 'isInt', 'required' => true), 'id_country' => array('type' => self::TYPE_INT, 'shop' => true,'validate' => 'isInt', 'required' => true), 'date_debut' => array('type' => self::TYPE_DATE, 'shop' => true, 'validate' => 'isDate', 'required' => true), 'date_fin' => array('type' => self::TYPE_DATE, 'shop' => true, 'validate' => 'isDate', 'required' => true), 'date_creation' => array('type' => self::TYPE_DATE, 'shop' => true, 'validate' => 'isDate', 'required' => true), ), ); .... et enfin pour la classe controller class AdminDevisManageController extends ModuleAdminController { /** @var array profiles list */ protected $products_array = array(); protected $destinations_array = array(); public function __construct() { $this->bootstrap = true; $this->table = 'devis'; $this->className = 'DevisManage'; $this->explicitSelect = true; $this->lang = true; $this->context = Context::getContext(); $this->addRowAction('edit'); $this->addRowAction('delete'); $this->addRowActionSkipList('delete', array(1)); $this->bulk_actions = array( 'delete' => array( 'text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?'), 'icon' => 'icon-trash' ) ); if (!Tools::getValue('id_devis')) $this->multishop_context_group = false; parent::__construct(); .... j'ai voulu vous montré ces trois codes car je pense que l'erreur vient soit apartir des tables ou bien des déclaration qui manques dans mon code. Merci Edited August 13, 2015 by Zouheir (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now