Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-03-2009 00:34:54

stefy
Nouveau membre
Date d'inscription: 28-03-2009
Messages: 3

[RESOLU][Zend_Table][1.7] CreateRow et save

Bonjour,

je débute avec Zend, juste quelques semaines d'expérience, et je bute sur un problème particulier.
J'ai créé un formulaire de création tout simple.

Lors du traitement de ce formulaire, j'initialise mon row avec un :
$item = $table->createRow(array());

puis je remplis mon row avec les données du formulaire :
$item->setFromArray(array_intersect_key($values, $item->toArray()));

et je finis par sauvegarder mon row:
$item->save();

Mon problème est que je rencontre l'erreur :
Cannot refresh row as parent is missing

(Mon objet est bien créé en base de données)


Après avoir mis en place de nombreux logs, j'ai identifié le problème comme étant le suivant:
Lors du createRow, la fonction initialise toutes les colonnes définies dans ma classe (j'utilise une classe passerelle vers ma bdd), y compris la clé primaire qui est vide puisque l'objet n'existe pas encore.

Hors, lors de l'appel de la fonction save, qui appelle la fonction refresh, la valeur de la clé primaire n'est pas mise à jour avec le dernier id inséré (ma clé primaire est un auto-incrément), car la fonction détecte que la clé primaire est définie(même si elle est vide).
Je dois pas être très claire, désolée, il se fait un peu tard.
Le problème se situe dans le fichier Zend/Db/Table/Abstract.php, dans la foncion insert(),  à la ligne :

if ($this->_sequence === true && !isset($data[$pkIdentity])) {
        $data[$pkIdentity] = $this->_db->lastInsertId();
}

Comme isset($data[$pkIdentity]) vaut true, l'intérieur de la condition n'est pas exécuté.
Si je remplace ce bloc par le code suivant :

if ($this->_sequence === true && (!isset($data[$pkIdentity]) || $data[$pkIdentity] == '')) {
           $data[$pkIdentity] = $this->_db->lastInsertId();
}

alors, cela marche sans générer mon erreur.


Je suppose qu'il y a quelque chose que je n'ai pas saisi dans l'utilisation de cette classe, car la création d'objet est tout de même la base,

vous en pensez quoi ?

Merci d'avance les gars smile
PS: il n'y a pas beaucoup de filles ici ou je me trompe ?

Dernière modification par stefy (28-03-2009 08:20:12)

Hors ligne

 

#2 28-03-2009 07:32:12

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [RESOLU][Zend_Table][1.7] CreateRow et save

Hello,

Et un :

Code:

$item = $table->createRow($values);
$item->save();

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 28-03-2009 08:19:54

stefy
Nouveau membre
Date d'inscription: 28-03-2009
Messages: 3

Re: [RESOLU][Zend_Table][1.7] CreateRow et save

Merci mikaelkael,
une bonne nuit de repos m'a bien remis les idées claires smile
Mon problème était en fait que dans mon formulaire de création, je mettais un champ caché avec ma clé primaire à vide.
Il m'a donc suffit de supprimer ce champ pour le formulaire de création, et tout marche correctement,

merci encore

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages