Вы должны просто использовать отношение stat, например. в модели пользователя:
public function relations()
{
return array(
// ...
'posts' => array(self::HAS_MANY, 'Post', 'user_id'),
'num_posts' => array(self::STAT, 'Post', 'user_id'),
// ...
);
}
http://www.yiiframework.com/doc/guide/1.1/fr/database.arr#statistical-query
EDIT: Вы также должны использовать жадную загрузку, чтобы построить свой DataProvider, например :
$criteria=new CDbCriteria;
$criteria->with('num_posts');
О запросах SQL, это следует использовать только 3 запросы:
- один запрос для подсчета GridView страницы,
- один запрос, чтобы получить пользователь модель,
- один запрос, чтобы получить пользователь NUM_POSTS.
Просто взгляните на журналы Yii, чтобы быть уверенным.
Не можете ли вы просто выполнить инструкцию SQL, чтобы не получать все данные из сообщений (findall) и просто позволить серверу SQL возвращать счет? Это будет намного быстрее, imo. Что ты думаешь? – JorgeeFG
Я не тестировал скорость с подсчетом sql и этим getter. В моем случае, потому что у меня есть cgridview с тысячами пользователей и количеством списков из модели списка для них. Он отлично работает, но я попробую с sql. Спасибо. – ineersa
И жаль, что я лгал, потому что у меня есть этот sql-оператор '$ provider = Lists :: model() -> findall ('user_id =: user_id', array (': user_id' => $ criteria));'. – ineersa