Архив метки: dataProvider

Сортировка записей блога по числу комментариев к статье

Собираем нехитрую конструкцию:


$comm_count_sql = "(SELECT COUNT(*) FROM {{comments}} WHERE comm_item_id = t.blog_id)";

$criteria = new CDbCriteria;
$criteria->with = 'comments';
$criteria->order = 'comm_count DESC';
$criteria->select = array('*', $comm_count_sql . " as comm_count");

$criteria->addCondition('blog_user_id = '.$user->user_id, 'AND');

$dataProvider = new CActiveDataProvider('Blogs', array('criteria' => $criteria, 'pagination'=>array('pageSize'=>10)));

if($dataProvider->getData()){
    $this->widget('zii.widgets.CListView',array(
        'dataProvider'=>$dataProvider,
        'template'=>'{items}{pager}',
        'itemView'=>'_user_items',
        'viewData' => array(
            'user' => $user,
        ),
        'emptyText'=>'',
        'summaryText'=>'',
        'pager'=>array(
            'header'=>'',
            'prevPageLabel'=>'<',
            'nextPageLabel'=>'>',
        ),
    ));
}else{
    echo 'Записей пока нет';
}

В модельке Blogs делаем связку:

    public function relations()
    {
        return array(
            'comments'=>array(self::BELONGS_TO, 'Comments', 'blog_id'),
        );
    }

Вот собственно и все 🙂