2012-06-25 7 views
0

과 쪽수를 매기다 사용하여 나는 다음과 같은 관계가 있습니다CakePHP는 2.0 : hasMany의와 HABTM

포스트 hasMany의 코멘트

포스트 belongsTo를 카테고리

포스트 HABTM 태그

나는 PAGINATE 방법을 사용하려면를 그 속성과 함께 :

public $paginate = array(
    'published', 
    'limit' => 3, 
    'fields' => array(
     'Post.title', 
     'Post.date_published', 
     'Post.abstract', 
     'Post.slug', 
     'Category.value', 
     'Category.slug' 
    ) 
); 

'게시' 사용자 정의 된 찾기 쿼리이지만 여기서는 중요하지 않습니다. 게시물과 그 카테고리 (위 참조)에 대한 정보 외에도 게시물에있는 댓글 개수와 모든 태그의 이름을 가져오고 싶습니다. 즉, $ data [ 'Post'] [ 'comment_count'] 및 $ data [ 'Post'] [ 'Tag'] [0]과 같은 편리한 방법으로보기 측면의 데이터에 액세스 할 수 있기를 원합니다. ['이름'].

충분히 해결책이 있습니까? HABTM은 약간 복잡 할 수도 있지만, hasMany 관계 일지라도 같은 쿼리에서 어떻게 주석을 가져올 지조차 알지 못합니다. 고맙습니다.

답변

0

내가 코멘트 모델의 counterCache 매개 변수를 사용하여

public $belongsTo = array('Post' => array('counterCache' => true)); 

을 다음과 같이하고, 게시물 테이블에 comments_count 필드를 추가하는 것은 포스트 댓글의 수를 가져 오는 가장 쉬운 해결책이 발견했다. 그러면 새 메모가 추가되거나 삭제 될 때마다 표가 업데이트됩니다.

태그에 대해서는 contains 배열을 사용하고 페이지 매김에도 사용할 수 있습니다. 나는이처럼 사용

$this -> paginate = array(
     'published', 
     'limit' => 3, 
     'contain' => array(
      'Category', 
      'Tag' => array('fields' => array(
        'value', 
        'slug' 
       )) 
     ), 
     'fields' => array(
      'Post.title', 
      'Post.date_published', 
      'Post.abstract', 
      'Post.slug', 
      'Post.comment_count', 
      'Category.value', 
      'Category.slug' 
     ), 
     'conditions' => $conditions, 
     'joins' => $joins 
    ); 

은 다음과 같이 그 일을 단지 카테고리와 필드 값과 태그 모델의 슬러그 모든 것들을 요청을 인출합니다.

특정 태그가있는 모든 게시물을 가져오고 싶을 때 특별한 경우가 있습니다. HABTM 관계라는 것을 기억하십시오. 이 유용한 모델 방법을 보았습니다 by Geoff Garbers

AppModel에 추가하면 hasAndBelongsToMany를 호출 할 수 있으며 페이지 매김 메소드에 대한 조인을 정의하는 지루한 프로세스가 자동화됩니다. 다음과 같은 조건을 정의 할 수

$joins = $this -> Post -> generateHabtmJoin('Tag'); 

지금 쉽게 가능 : 위에서 볼 수 있듯이, 그들은 같은 위의 방법으로 생성 된 $ 조인 배열을 통해 추가

$conditions = array('Tag.slug' => $this -> request -> params['tag']); 

을 어느 특정 Tag.slug가있는 게시물 만 가져옵니다.

희망이 있으면 누군가에게 도움이됩니다.

관련 문제