2010-03-14 3 views
1

У меня есть несколько HABTM, как эти:CakePHP постраничной несколько HABTM

// User модель
вар $ hasMany = массив ('Post');

// Почтовая модель
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)

Вы также можете попробовать сдерживающее поведение, которое позволит вам указать, какие модели вы хотите включить в свой результирующий набор. Контейнер - это ядро ​​в 1.2+ (http://book.cakephp.org/view/474/Containable), иначе вам нужно будет его захватить самостоятельно.

Я не слишком уверен в том, почему у вас есть такой гигантский запрос. Я был бы более склонен делать что-то похожее на следующее.

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

И пусть Cake получит все связанные данные для меня через мои ассоциации. Затем я бы скорректировал возврат с использованием массива условий (http://api.cakephp.org/class/controller#method-Controllerpaginate), чтобы указать категорию.

Извините, но это не дефактовое решение, но я сам любитель CakePHP! Вам может быть проще просмотреть запросы, результаты и т. Д., Используя DebugKit, http://github.com/cakephp/debug_kit

+0

hi David, i use Containable для получения тега и объединения таблицы для категории. Не лучшее решение для меня, но, по крайней мере, я получаю то, что хочу – izmanromli

 Смежные вопросы

  • Нет связанных вопросов^_^