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
-~----------~----~----~----~------~----~------~--~---