Bonjour à tous,
Je bosse un petit projet de site collaboratif sur cakephp 2.6.2.
Tout ce passait plutôt bien jusqu'à ce que je tombe sur un os !
Le problème est simple : un utilisateur (user) peut choisir 0 à N genres musicaux favoris (styles). Un style peut appartenir à 0 à N users. On est donc, si je ne m'abuse, dans le cas d'une relation HABTM. Dans ma base j'ai donc les tables 'users', 'styles' et 'styles_users' dans laquelle j'ai un id, style_id et user_id.
Dans mon StylesController j'ai ma fonction edit comme ceci :
public function edit($user_id){
// je récupère ma liste des styles
$styles = $this->Style->find('list');
$this->set(compact('styles'));
// je vérifie mon user
if(empty($user_id)){
throw new Exception("Utilisateur invalide");
}
if($user_id != $this->Auth->user('id')){
$this->Session->setFlash("Vous ne pouvez pas éditer cet utilisateur", "flash", array('type' => 'alert'));
}
// le moment critique : je fais ma sauvegarde
if($this->request->is('post') || $this->request->is('put')){
if($this->Style->saveAll($this->request->data)){
$this->Session->setFlash("Votre données ont bien été sauvegardées","flash", array('type' => 'success'));
}
}
}
Dans ma vue 'edit', j'ai mon petit formulaire :
<?= $this->Form->create('Style'); ?>
<?= $this->Form->input('User.id', array('type' => 'hidden', 'value' => $this->Session->read('Auth.User.id'))); ?>
<?= $this->Form->input('Style.Style', array('label' => 'Modifier vos genres musicaux', 'multiple' => true, 'options' => $styles)); ?>
<?= $this->Form->end(); ?>
Pour finir, quand je debug $this->request->data j'obtiens par exemple :
array(
'User' => array(
'id' => '2'
),
'Style' => array(
'Style' => array(
(int) 0 => '2',
(int) 1 => '3'
)
)
)
Dans ma BDD, un seul enregistrement est créé dans ma table 'styles_users' quelque soit le nombre de 'styles' renseigné par l'utilisateur. Dans cet enregistrement, il y a le user_id qui est ok et le style_id qui est toujours == 0. Ca marche pas quoi !
J'ai lu la doc' concernant les sauvegardes de données dans les HABTM mais vraisemblablement quelque chose m'échappe ... !
Je ne dois pas être très loin de la solution mais là je sèche un peu ... Alors si quelqu'un pouvait me donner un petit coup de patte ;)