Группировка похожих записей - PullRequest
0 голосов
/ 05 апреля 2011

У меня есть две таблицы, Сообщение и категории, Сообщение имеет идентификатор_категории

Я могу получить все имя_почты |category_id

с $ post [Категория] [имя], я могу получить

Post  |  Category       

Hello  |  php 
World  |  php    
Hi     |  php 
Earth  |  php
Hello1 |  asp 
World1 |  asp    
Hi1    |  asp 
Earth1 |  asp

Как получить:

php

Hello  
World    
Hi     
Earth 

asp

Hello1 
World1   
Hi1    
Earth1

Его группа, но логика ушла ине знаю, как их получить

редактировать: я думаю, что должен быть первый цикл, который получает Категории, а не второй, внутри первого, который получает сообщения, где post.cat_id = cat.id Но в порядке вещей, я не знаю, как я могу это сделатьэто.

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Это можно сделать одним запросом в контроллере Category и вложенным циклом в представлении:

в контроллере Category:

function some_action () {
   $options = array (
      'recursive' => 1,
      'order' => array ( 'Category.name' => 'asc' )
   );
   $categories = $this->Category->find ( 'all', $options );
   $this->set ( 'categories', $categories );
}

и в представлении:

<?php
foreach ( $categories as $c ) {
   echo $c['Category']['name'] . '<br />';
   foreach ( $c['Post'] as $p ) {
      echo ' &nbsp; ' . $p['name'] . '<br />';
   }
   echo '<br />';
}
?>
1 голос
/ 05 апреля 2011

При получении данных с помощью find () вы можете указать, что группировать, используя параметр group . Вот соответствующая глава в кулинарной книге http://book.cakephp.org/view/1018/find

РЕДАКТИРОВАТЬ игнорировать выше

Так что вы должны иметь

category = array ('Category' => array ('name' => 'php', 'Posts' => array () ...);

По вашему мнению, тогда у вас есть:

<?php
foreach($categories as $category) {
    echo $category['name'];
    foreach($category['Posts'] as $post) {
        echo $post['name'];
    }
} ?>
...