Bonjour à tous les deux, @Medhi : je pense que tu n'as pas tout à fait compris mon système. Je ne rentre pas de nouveaux tags lors de la sauvegarde d'un Item. J'associe des tags existants à des items, ce n'est pas la même chose et c'est bien pour cela que je n'ai pas besoin des "last_insert_ids" ! Comme je l'ai peut-être mal exprimé, mon modèle a les caractéristiques suivantes :
Item hasOne Article Item hasOne Video Item hasOne Photo ... Item HABTM Tag Item HABTM Agregat ... Je n'ai pas besoin de tester l'existence d'un Tag, mais je dois vérifier que le couple "item_id / tag_id" dans ma table de liaison est unique, ce que Cake gère parfaitement. @Kalt : la source HTML générée par mon formulaire est très longue, car il y a des Fckeditor dedans et de nombreux champs. Je ne peux donc pas le recopier ici. Par contre, voici le début de l'action qui gère la sauvegarde : http://bin.cakephp.org/view/1935009743 Mais je suis désolé, tous mes tests sur saveAll() n'ont jamais sauvegardé les HABTM, et le décortiquage de la méthode dans le code source de la dernière release que j'utilise (à ce jour, c'est la 6616) ne montre pas cela. Donc comme Medhi, je suis bien curieux de voir comment tu fais... >>>> $this->Modele->set($this->data); Franchement, je ne vois aucune utilité à faire celà, puisque le set n'est utilisé que dans la vue... A la limite, on peut faire un $this->Modele->create() avant le save, mais mes tests n'ont rien apporté de probant à ce niveau. Donc je reste sur ma méthodologie pour le moment, à savoir un $this- >Item->save() suivi immédiatement d'un $this->Item->saveAll(). Merci à tous les deux pour votre contribution. Aurélien On 1 avr, 10:14, "Mehdi AMINI" <[EMAIL PROTECTED]> wrote: > Salut, > > > Car chez moi j'ai un formulaire > > avec un modèle principal, des HABTM et un hasOne, et le tout > > fonctionne avec un seul appel à la fonction saveAll, pas besoin plus > > contrairement à ce que conseille Mehdi. > > Si tu as "Item HaBTM Tag", tu arrives a créer de nouveau tags en > appelant saveAll sur Item ? > Parceque je ne vois pas ce qui le permet dans le code de saveAll, tu > ne confonds pas entre la création de l'enregistrement associé et la > création de l'association ? > > > Précision également par rapport au message de Mehdi : cake ne supprime > > pas tous les items liés par HABTM, par contre il commence toujours par > > un select count(*) sur les items liés pour voir s'il doit ajouter un > > enregistrement ou le mettre à jour. > > C'est nouveau ? > Jusqu'ici on avait ce comportement : > <?php > $this->Post->save(array( > 'Post' => array( > 'id' => 1, > ), > 'Tag' => array( > 'Tag' => array(2), > ), > )); > // Foreward: Check out the debug SQL for this save ... > // DELETE FROM `posts_tags` WHERE post_id = '1' > // INSERT INTO `posts_tags` (post_id,tag_id) VALUES (1,2) > ?> > > > Dernier point à vérifier peut-être mais je doute fort que cela change > > quoi que ce soit : dans mon action edit du Controller, je fais : > > > $this->Modele->set($this->data); > > $this->Modele->saveAll(); > > > au lieu d'un simple : > > > $this->Modele->saveAll($this->data); > > saveAll comment avec : > > if (empty($data)) { > $data = $this->data; > } > > Donc aucune différence... > > Mehdi --~--~---------~--~----~------------~-------~--~----~ Groupe "Cakephp-fr". Adresse : [email protected] Pour résilier : [EMAIL PROTECTED] Pour les options : http://groups.google.com/group/cakephp-fr?hl=fr -~----------~----~----~----~------~----~------~--~---
