2010-03-24 7 views
1

Je travaille sur un plugin pour notre CMS CakePHP qui gérera les blogs. Lorsque j'arrivais aux balises, j'avais besoin de définir la relation HABTM sur unique = false pour pouvoir ajouter des balises à un post sans avoir à les réinitialiser toutes.Utilisation des relations HABTM dans les plugins cakephp avec un ensemble unique à false

Le modèle BlogPost ressemble à ceci

class BlogPost extends AppModel { 
    var $name = 'BlogPost'; 
    var $actsAs = array('Core.WhoDidIt', 'Containable'); 
    var $hasMany = array('Blog.BlogPostComment'); 
    var $hasAndBelongsToMany = array('Blog.BlogTag' => array('unique' => false), 'Blog.BlogCategory'); 
} 

Le modèle BlogTag ressemble à ceci

class BlogTag extends AppModel { 
    var $name = 'BlogTag'; 
    var $actsAs = array('Containable'); 
    var $hasAndBelongsToMany = array('Blog.BlogPost'); 
} 

L'erreur SQL que je reçois quand j'ai le cadre unique => true dans la relation HABTM entre le BlogPost et BlogTag est

Query: SELECT `Blog`.`BlogTag`.`id`, `Blog`.`BlogTag`.`name`, `Blog`.`BlogTag`.`slug`, `Blog`.`BlogTag`.`created_by`, `Blog`.`BlogTag`.`modified_by`, `Blog`.`BlogTag`.`created`, `Blog`.`BlogTag`.`modified`, `BlogPostsBlogTag`.`blog_post_id`, `BlogPostsBlogTag`.`blog_tag_id` FROM `blog_tags` AS `Blog`.`BlogTag` JOIN `blog_posts_blog_tags` AS `BlogPostsBlogTag` ON (`BlogPostsBlogTag`.`blog_post_id` = 4 AND `BlogPostsBlogTag`.`blog_tag_id` = `Blog`.`BlogTag`.`id`) 

Comme vous pouvez le voir tente de régler la blog_tags table à 'Blog'. 'BlogTag. ce qui n'est pas un nom MySQL valide. Lorsque je supprime l'unique => true de la relation, tout fonctionne et je peux enregistrer une balise mais en ajoutant une autre, elle efface simplement la première et la remplace par la nouvelle.

Quelqu'un a-t-il des idées? Est-ce un bug ou est-ce que je manque quelque chose?

Cheers, Dean

Répondre

0

Dean

Alors avez-vous les tables blog_posts_blog_tags?

Pour citer la littérature sur les relations CakePHP HABTM

Nous aurons besoin de mettre en place une table supplémentaire dans la base de données pour les associations HABTM. Le nom de cette nouvelle table de jointure doit inclure les noms des deux modèles concernés, dans l'ordre alphabétique, et séparés par un trait de soulignement (_).

Alors (laisser tomber le peu de blog pour une meilleure lisibilité!) Vous avez besoin de vos tables de messages, votre table tags et votre table posts_tags et la définition HABTM est

class Post extends AppModel { 
    var $name = 'Post'; 
    var $hasAndBelongsToMany = array(
     'Tag' => 
      array(
       'className'    => 'Tag', 
       'joinTable'    => 'posts_tags', 
       'foreignKey'    => 'post_id', 
       'associationForeignKey' => 'tag_id', 
       'unique'     => true, 
      ) 
    ); 
} 
Questions connexes