Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je développe actuellement une application de gestion de bons de commandes avec le zend framework mais j'ai un probleme pour l'enregistrement de mes données dans la base.
j'ai trouvé pas mal de documentation qui traitent de la selection de données sur des tables dépendantes.
mais je n'ai pas trouvé de solution à mon probleme qui concerne l'enregistrement de ces données.
j'ai 2 tables, une qui contient les informations des bons de commande(nom, adresse, etc) et une autre qui contient les données des produits associés à ces bons. Celle-ci sont associées a 2 modeles : Bdc et Produit
Apres la validation de ces informations je voudrais les sauvegarder dans ces deux tables.
Les champs des tables sont mappés dans les molèles :
Bdc.php
class Bdc extends Zend_Db_Table { protected $_name = 'bdc'; protected $_dependentTables = array('produit'); ...
Produit.php
class Produit extends Zend_Db_Table { protected $_name = 'produit'; protected $_referenceMap = array( 'bdc' => array( 'columns' => array('bdc_id'), 'refTableClass' => 'bdc', 'refColumns' => array('id')) ); }
Vu que je n'ai pas trouvé de méthode pour la sauvegarde, j'ai donc créé une méthode spécifique.
/** Méthode sauvegardant le bon de commande dans la base de données $databdc : Tableau contenant les informations d'un bon de commande $dataprod : Tableau contenant les informations des produits associés */ public function insertNewBdc($databdc, $dataprod) { $db = $this->getAdapter(); parent::insert($databdc); $id = $db->lastInsertId(); $i=0; $prod = new Produit(); foreach ($dataprod as $produit) { $monprod = $prod->fetchNew(); $monprod->id = $i; $monprod->designation = $produit['designation']; $monprod->ref = $produit['ref']; $monprod->qte = $produit['qte']; $monprod->puht = $produit['puht']; $monprod->bdc_id = $id; $monprod->save(); $i++; } }
j'appel cette méthode dans mon controleur
$bdc = new Bdc(); $bdc->insertNewBdc($databdc, $dataprod);
L'enregistrement des données relative au bon de commande fonctionne mais le probleme se situe au niveau des produits : Zend Framework refuse de modifier les clés primaire de la table produit.
J'ai egalement essayer de lui passé un tableau des produits associés comme pour les données du bdc mais les clés primaire restent à 0
Ce début solution est-elle valable ?
Existe-t-il une autre méthode pour enregistrer les données en passant par la couche d'abstraction aussi facilement que la selection ?
Ou bien faut-il insérer les données a l'aide de requetes SQL ?
J'espère avoir été assez clair
Merci d'avance de vos réponses
Dernière modification par j.roc (24-05-2007 08:49:57)
Hors ligne
Hum déjà je pense que tu peux simplifier ton code comme ceci:
public function insertNewBdc($databdc, $dataprod){ $db = $this->getAdapter(); parent::insert($databdc); $id = $db->lastInsertId(); $prod = new Produit(); foreach ($dataprod as $produit){ $produit['bdc_id'] = $id; $prod.insert($produit); } }
Dernière modification par Isilgawen (16-05-2007 18:44:59)
Hors ligne
En simplifiant le code de cette manière les informations s'enregistre correctement dans la base
Merci de ton aide
Hors ligne
Pages: 1