Aurélien,

Voudrais-tu détailler un peu plus le formulaire que tu utilises ainsi
que l'action du Controller principal ? 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.

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.

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);

Je travaille actuellement avec la révision 6598.

On 31 mar, 17:20, "Mehdi AMINI" <[EMAIL PROTECTED]> wrote:
> > Cela me semble pas mal, mais tu fais celà dans le Modèle ou
> >  dans le Contrôleur ?
>
> Tel qu'il est écrit, c'est dans le controlleur... Dans le modele c'est
> pareil il suffit d'enlever '->Item'.
>
> >  Par contre, je ne comprends pas pourquoi tu récupères les ids créés vu
> >  que je n'en ai pas besoin pour mon saveAll().
>
> Tu enregistre les Tags, mais tu veux peut être les lier à ton Item ?
> C'est pour ça qu'il faut les Ids.
>
> >  Par ailleurs, ton système fonctionne-t-il lors d'un update ?
> > J'entends  par là, est-ce qu'on ne risque pas d'avoir des doublons dans la 
> > table
> >  de liaison "items_tags" ?
>
> Non cake commence par supprimer tout les items_tags pour l'item que tu 
> updates.
>
> Je suis resté dans un cadre générique, mais avant de vouloir sauver un
> Tag, il faudrai vérifier qu'il n'existe pas déja nan ?
>
> $ids=array();
> foreach($this->data['Tag'] as $tag) {
>    if (isset($tag['Tag[['tag'])) {
>      $check=$this->Item->Tag->findByTag($tag['tag']);
>      if(isset($check['Tag']['id']))
>         $ids[]=$check['Tag']['id']
>   } else {
>        $this->Item->Tag->save($tag);
>        $ids[]=$this->Item->Tag->getLastInsertId();
>   }}
>
> unset($this->data['Tag']);
> $this->data['Tag']=$ids;
>
> $this->Item->saveAll($this->data));
>
> Mehdi
--~--~---------~--~----~------------~-------~--~----~

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 à