bindmodel cakephp с графом - PullRequest
       66

bindmodel cakephp с графом

0 голосов
/ 09 января 2012

У меня две модели. 1) Пользователь и 2) Пост Пользователь может иметь много сообщений. Это означает, что здесь мы свяжем обе модели, используя hasMany. Я перечисляю пользователей, и в этом списке я хочу показать #no сообщений. Я использую пейджинг CakePHP. Я не могу перечислить таким образом. Любая помощь, пожалуйста.

User.php (модель)

<?php
class User extends AppModel {
    var $name = 'User';
    var $primaryKey = 'user_id';
    var $hasMany = array('Post');
}
?>

Post.php (модель)

<?php
class Post extends AppModel {
    var $name = 'Post';
    var $primaryKey = 'post_id';
}
?>

Что я должен написать для нумерации страниц в контроллере?

Я попробовал counterCache вариант, но не получилось.

Ответы [ 2 ]

1 голос
/ 09 января 2012

Вы можете использовать counterCache, но для этого вам нужно указать его в модели

в вашей модели Post:

var $belongsTo = array(
    'User' => array('counterCache' => true)
);

В вашей таблице пользователей должно быть дополнительное поле

post_count INT()

Как только это будет сделано, каждый раз, когда пользователь сохраняет / удаляет сообщение, его post_count будет автоматически увеличиваться / уменьшаться, что удобно.

Другое решение - добавить групповое предложение в ваш поискparams

'group' => array('Post.id'),
'fields' => array('count(Post.id) as post_count', ...),
1 голос
/ 09 января 2012

Что именно вы пытаетесь показать?Вы хотите показать количество сообщений для каждого пользователя при отображении списка пользователей?

Если это так, это не относится к нумерации страниц, а скорее к массиву данных, извлекаемых в вашем контроллере.

Предположим, контроллер называется index:

function index() {
    $this->User->recursive = 0;
    $this->set('users', $this->paginate());
}

Предоставление вашегоотношения установлены правильно [они выглядят так], вы сможете найти все сообщения пользователя, вложенные в этот массив.Затем вы можете посчитать их и отобразить результат.

Отладчик торта действительно полезен для исследования выходных данных торта:

debug($yourdataarray)

Однако, находя каждый пост и подсчитывая ихзвучит вероятная проблема производительности.Решение, которое я лично сделал, состоит в том, чтобы добавить и удалить контроллер в таких моделях, как ваш 'Post', добавить или удалить из поля количества постов в записи db соответствующего пользователя.Тогда вы можете просто и быстро повторить эти данные.

Надеюсь, это поможет.

...