2010-11-24 7 views
3

J'ai des professions HABTM utilisateur. Dans l'édition de l'utilisateur, il y a une liste de cases à cocher des professions. Cela fonctionnait lorsque j'ai défini la relation HABTM dans le modèle utilisateur. Mais cette relation interrompait d'autres fonctions je l'ai enlevé et mis ce dans le contrôleur utilisateurCakePHP: Le modèle de liaison ne fonctionne pas

$this->User->bindModel(
     array(
      'hasAndBelongsToMany' => 
      array(
       'Profession' => 
        array(
         'className'    => 'Profession', 
         'joinTable'    => 'professions_users', 
         'foreignKey'    => 'user_id', 
         'associationForeignKey' => 'profession_id', 
         'unique'     => true, 
         'conditions'    => '', 
         'fields'     => '', 
         'order'     => '', 
         'limit'     => '', 
         'offset'     => '', 
         'finderQuery'   => '', 
         'deleteQuery'   => '', 
         'insertQuery'   => '' 
        ) 
       ) 
      ) 
     ); 

La valeur de retour de cette fonction de liaison est également vrai. Maintenant, lorsque j'appelle $ this-> User-> saveAll ($ this-> data), les lignes ne sont plus créées dans la table professions_users.

Une idée?

Répondre

7

Le comportement par défaut de bindModel doit exister pour une opération find, puis revenir aux associations par défaut. Vous pourriez penser qu'une opération save ne déclencherait pas cela, mais si vous utilisez Cake's count-caching feature, ou un comportement avec un rappel afterSave qui exécute un find, vous avez peut-être tort.

Essayez de passer le false comme deuxième paramètre de votre appel Model::bindModel. Cela rendra votre liaison à la volée dure la durée de la demande. Vous pouvez toujours réinitialiser explicitement les associations une fois votre saveAll terminé en appelant Model::resetAssociations.

+1

Le deuxième paramètre "faux" fonctionne. Mec tu es un génie! :RÉ –