2010-03-24 4 views
1

블로그를 처리 할 CakePHP CMS 용 플러그인을 작업 중입니다. 태그를 가져올 때 HABTM 관계를 unique = false로 설정하여 모두 재설정하지 않고도 게시물에 태그를 추가 할 수 있어야했습니다.고유 한 false로 설정된 cakephp 플러그인에서 HABTM 관계 사용

블로그 게시물 모델은 BlogTag 모델이

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

내가 점점 오전 SQL 오류처럼 보이는이

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'); 
} 

처럼 보인다 나는 사이의 HABTM 관계에 고유 => 진정한 설정이있을 때 BlogPost 및 BlogTag는

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`) 

입니다. blog_tags 테이블을 'Blog'. 'BlogTag. 이것은 유효한 MySQL 이름이 아닙니다.

나는 모든 작품을 찾아서 하나의 태그를 저장할 수 있지만 다른 태그를 추가 할 때 첫 번째 태그를 지우고 그 자리에 새 태그를 넣습니다.

누구에게 아이디어가 있습니까? 그것은 버그입니까 아니면 그냥 뭔가 빠졌습니까?

건배, 딘

답변

0

딘은

그래서 당신은 테이블 blog_posts_blog_tags을해야합니까?

는 HABTM 관계

우리는 HABTM 연결을 처리하기 위해 데이터베이스에 추가 테이블을 설정해야합니다에 CakePHP의 문헌을 인용합니다. 이 새로운 조인 테이블의 이름은 관련된 두 모델의 이름을 알파벳 순서로 포함하고 밑줄 (_)로 구분해야합니다.

그래서 (가독성을위한 블로그 비트를 삭제!) 당신은 당신의 게시물 테이블, 태그 테이블과 posts_tags 테이블을 필요로하고 HABTM 정의는

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, 
      ) 
    ); 
} 
입니다