Bon, je n'ai pas de réponse à cette problématique, mais je pense que
c'est du aux niveaux de récursivité, aux bindings, à l'intitulé des
champs composés (data[Photo][Photo][])...

En tout cas, je m'en suis sorti en faisant donc un "$this->Diaporama-
>save($this->data)" après mon enchaînement "save() / saveAll()"...
Mais cela m'oblige à tester la présence de $this->data[Photo][Photo]
dans mon contrôleur et donc à enchaîner trois save pour un formulaire
unique !
Quand j'aurais tu temps, à moins que la core team n'améliore encore
save() ou saveAll(), je vais essayer de trouver une manière plus
élégante et plus "automagique" pour faire ces enregistrements un peu
complexes.





On 8 avr, 15:18, avairet <[EMAIL PROTECTED]> wrote:
> Salut tout le monde,
>
> Je relance ma discussion sur la sauvegarde des modèles associés,
> notamment l'enchaînement save() + saveAll() que je décrivais dans un
> message précédent.
>
> Voici en bref ma structure de modèles :
>
> Item belongsTo Nature
> Item belongsTo Theme
> ...
> Item hasOne Article
> Item hasOne Diaporama
> Item hasOne Photo
> ...
> Item HABTM Tag
> Item HABTM Agrégat
> ...
> _______________________
>
> Diaporama belongsTo Item
> Diaporama HABTM Photo
> ...
>
> Dans un formulaire, j'ai un tableau représentant des Photos avec une
> case à cocher pour chaque photo. Le but est d'insérer les photos
> cochées dans un Diaporama (donc de compléter la table de liaison
> diaporamas_photos issue de la relation "Diaporama HABTM Photo".
>
> Comme je l'ai indiqué dans l'autre message sur ce sujet, un 
> "$this->Item->save($this->data)" me sauvegarde bien tous les champs dont le
>
> name est égal à "data[Item][nom_du_champ]", ainsi que les deux HABTM
> pour tag et agregat, dont les attributs name sont du type "data[Tag]
> [Tag][]" et "data[Agregat][Agregat][]".
>
> Par contre, le save() "simple" ne sauvegarde pas les champs du type
> data['Nature']['id'] ou data['Diaporama']['legende']. Pour ces champs
> là, je dois faire appel à $this->Item->saveAll($this-data).
>
> J'ai donc dans mon contrôleur quelque chose comme celà :
>
> if (!empty($this->data)) {
>  if ($this->Item->save($this->data) && $this->Item->saveAll($this->data)) {
>
>    $this->Session->setFlash(__('The Item has been saved', true));
>    $this->redirect(array('action'=>'index'));
>  }
>  $this->Session->setFlash(__('The Item could not be saved. Please, try
> again.', true));
>
> }
>
> Bien que je ne trouve pas celà très élégant, ni très performant (le
> saveAll() re-sauvegarde les champs liés à Item !), cela fonctionne
> correctement, SAUF pour les photos de mon diaporama, qui ne sont
> jamais sauvegardées !
>
> Dans mon formulaire, toutes les checkbox liées aux photos ont un name
> de format "data['Photo']['Photo'][]".
>
> Comment faire pour que ces champs aillent bien compléter ma table de
> liaison "diaporamas_photos" qui est le reflet de l'association
> Diaporama HABTM Photo ?
>
> J'ai essayé de jouer avec du recursive, avec du bind/unbind et même
> avec le Bindable Behavior de Mariano, mais rien à faire...
>
> J'ajoute que le formulaire global n'affiche pas forcément des champs
> pour le diaporama, donc je cherche une solution full dynamique, qui
> m'évite de faire un gros switch dans mon contrôleur (Exemple : if
> (diaporama) -> $this->Diaporama->save($this->data), elseif (Article) -
>
> > $this->Article->save(), etc.)...
--~--~---------~--~----~------------~-------~--~----~

Groupe "Cakephp-fr".
Adresse : [email protected]
Pour résilier  : [EMAIL PROTECTED]
Pour les options : http://groups.google.com/group/cakephp-fr?hl=fr
-~----------~----~----~----~------~----~------~--~---

Répondre à