CakePHP считает в цикле

Я расширил учебник по блогу CakePHP и добавил категории для своих сообщений. Модель сообщений относится к модели категорий. В моем представлении сообщений я зацикливаю таблицу категорий, чтобы перечислить категории для меню в представлении, которое отлично работает:

/* gets the category names for the menu */
$this->set('category', $this->Post->Category->find('all'));

Теперь я пытаюсь добавить количество сообщений в каждый пункт меню (категория). Пока я получил это:

/* gets the category count for category 2*/
$this->set('category_2_count', $this->Post->find('count', array(
'conditions' => array('Category.id =' => '2'))));

Проблема в том, что я, очевидно, больше не могу использовать цикл в своем представлении. При этом я должен получить каждую категорию + каждый счет, что кажется очень неэлегантным. Есть ли способ запросить имена категорий и количество и получить один массив для представления?

Любые идеи? Я новичок в Cake, и любая помощь очень ценится.


person Joshua    schedule 02.07.2012    source источник


Ответы (2)


В вашем контроллере:

$this->set('category', $this->Post->Category->find('all', array(
    'fields' => array(
        '*',
        '(SELECT COUNT(*) FROM posts WHERE category_id = Category.id) AS `post_count`'
    )
)));

На ваш взгляд:

foreach ($category as $c) {
    echo $c['Category']['name']; // category name
    echo $c[0]['post_count']; // post count
}
person Hoff    schedule 03.07.2012

попробуй это:

$stats = $this->Category->Post->find('all', array(
    'fields' => array(
        'Category.*',
        'COUNT(Post.id) AS cnt'
    ),
    'group' => 'Category.id'
));
person jagm    schedule 02.07.2012
comment
Но я не могу сначала получить доступ к модели категории: пытаюсь получить свойство не-объекта. - person Joshua; 03.07.2012
comment
добавьте эту строку выше: Controller::loadModel('Category'); - person jagm; 11.07.2012