2010-03-14 3 views
1

페이지를 매기는 :CakePHP의 내가 이런 여러 HABTM이 여러 HABTM

// 사용자 모델
VAR $의 hasMany의 = 배열 ​​('포스트');

// 게시 모델
var $ hasAndBelongsToMany = array ('Category', 'Tag');

// 범주 모델
var $ hasAndBelongsToMany = array ('Post');

// 태그 모델
var $ hasAndBelongsToMany = array ('Post');

사용자 및 태그 (특정 카테고리 내)와 함께 모든 게시물을 가져 오려고했는데, 태그를 가져 오면 결과가 잘못되었습니다.

$this->paginate = array 
(
    'Post' => array 
    (
     'limit' => 2, 

     'fields' => array(
      'Post.title', 'Post.content', 'Post.slug', 'Post.created', 
      'Tag.name', 
      'User.username', 'User.created', 'User.post_count', 'User.avatar_file_name'), 

     'joins' => array 
     (
      array(
       'table' => 'categories_posts', 
       'alias' => 'CategoriesPost', 
       'type' => 'inner', 
       'conditions'=> array('CategoriesPost.post_id = Post.id') 
      ), 

      // FETCH USER 
      array(
       'table' => 'users', 
       'alias' => 'User', 
       'type' => 'inner', 
       'conditions'=> array('Post.user_id = User.id') 
      ), 

      // FETCH TAGS 
      array(
       'table' => 'posts_tags', 
       'alias' => 'PostsTag', 
       'type' => 'inner', 
       'conditions'=> array('PostsTag.post_id = Post.id') 
      ), 

      array(
       'table' => 'tags', 
       'alias' => 'Tag', 
       'type' => 'inner', 
       'conditions'=> array('Tag.id = PostsTag.tag_id') 
      ), 

      array(
       'table' => 'categories', 
       'alias' => 'Category', 
       'type' => 'inner', 
       'conditions'=> array('Category.id = CategoriesPost.category_id', 'Category.slug' => $slug) 
      ) 
     ) 
    ) 
); 

$posts = $this->paginate(); 
나는이 안돼서 이후

사람이 해결책을 내 놔 수 있을까? 많은 감사 ...

+0

'틀린'은 무엇을 의미합니까? 결과 집합을 기록 할 수 있습니까? – sibidiba

+0

글쎄, 내가 태그를 가져 오면 결과는 첫 번째 포스트의 루프가됩니다. 태그를 가져 오지 않은 경우 올바른 결과의 모든 게시물을 반환합니다. – izmanromli

답변

1

관련 모델을 사용하여 결과 집합의 페이지 매김을 시도 할 때 비슷한 문제가 발생했습니다. 나는 수동으로 모델을 바인딩하고 쿼리를 실행 한 다음 Cake가 올바른 데이터를 함께 포함하도록 바인딩을 해제해야했다. (http://book.cakephp.org/view/86/Creating-and-Destroying-Associations-on-the-Fly)

결과 집합에 포함 할 모델을 지정할 수있는 포함 할 수있는 동작을 시도 할 수도 있습니다. Containable은 1.2+ (http://book.cakephp.org/view/474/Containable)의 핵심이며, 그렇지 않으면 직접 잡아야합니다.

왜 그렇게 엄청난 질문을 던지는지 확신 할 수 없습니다. 나는 다음과 비슷한 것을 할 경향이있다.

$this->Model->recursive = 2; 
$this->Model->paginate(); 

그리고 케이크가 내 관련을 통해 나와 관련된 모든 데이터를 얻도록하십시오. 그런 다음 범주를 지정하는 조건 배열 (http://api.cakephp.org/class/controller#method-Controllerpaginate)을 사용하여 수익을 조정합니다.

죄송합니다. 사실 해결책이 아니지만 저는 CakePHP 아마추어입니다! DebugKit을 사용하여 쿼리, 결과 등을 보는 것이 더 쉬울 수도 있습니다. http://github.com/cakephp/debug_kit

+0

안녕하세요 David, 태그를 가져 오려면 Containable을 사용하고 카테고리는 테이블을 조인합니다. 나에게 가장 좋은 해결책은 아니지만 최소한 나는 내가 원하는 것을 얻는다. – izmanromli