Bonjour à tous je rencontre des difficultés à sauvegarder des données multiples associées entre elles par une relation HABTM.
Le système est assez classique puisqu'il s'agit de créer ou d'éditer des événements et de sauvegarder par la même occasion des tags associés.
J'ai donc créé 3 tables (events, tags et events_tags), fait les associations : public $hasAndBelongsToMany = array('Tag'); dans le model Event et inverssement public $hasAndBelongsToMany = array('Event'); dans le model Tag.

Pour l'ajout des tags, j'utilise la class tagit (https://github.com/aehlke/tag-it/blob/master/README.markdown) cela me permet d'ajouter une liste de tags et de faire de l'autocompletion avec les tags précédements rentrés. Cette classe me permet d'effectuer une autocompletion en fonction des tags précédement rentrés.

Mon problème se situe au niveau de la sauvegarde de l'événement, pour l'événement tout se passe bien, par contre je n'arrive pas à enregistrer les tags associés, j'ai esssayé saveAssociated et saveAll mais cela ne fonctionne pas.

Voici le debug de mon $this->request->data :

array(
    'Event' => array(
        'name' => array(
            'fra' => 'Premier événement en français',
            'eng' => 'Premier événement en anglais'
        ),
        'ss_titre' => array(
            'fra' => 'Sous-titre en français',
            'eng' => 'Sous-titre en anglais'
        ),
        'heure_dbt' => '19h00',
        'heure_fin' => '20h00',
        'description' => array(
            'fra' => '',
            'eng' => ''
        ),
        'adresse' => '',
        'organisateur' => '',
        'lien_organisateur' => '',
        'id' => '3'
    ),
    'Tag' => array(
        (int) 0 => array(
            'name' => 'toujours'
        ),
        (int) 1 => array(
            'name' => 'des'
        ),
        (int) 2 => array(
            'name' => 'test'
        )
    )
)

et celui de mon controller :

public function admin_edit($id=null){
        $this->layout = 'admin';

        $this->Event->locale = Configure::read('Config.languages');
        if($this->request->is('put') || $this->request->is('post') ){
            $data = $this->request->data;
            if($this->Event->saveAssociated($data , array('deep' => true))){
                $this->Session->setFlash('L\'événement a bien été modifié', 'notif');
            }else{
                $this->Session->setFlash('Veuillez remplir correctement tous les champs', 'notif', array('type'=>'danger'));
            }
        }elseif($id){
            $this->Event->id = $id;
            $this->request->data = $this->Event->readAll();
        }else{
            $this->request->data = $this->Event->getDraft();
        }
    }

Je me demande si il s'agit d'un problème relatif à la construction du tableau Tag ou si c'est un problème de configuration de relation.
En esperant que ca parle à certains.
Merci d'avance
Antoine

1 réponse


Personne pour m'aider ?