Yii CGridView и счетчик SQL - PullRequest
       2

Yii CGridView и счетчик SQL

0 голосов
/ 28 октября 2011

Я пытаюсь загрузить cGridView с результатами запроса между двумя таблицами (благотворительность и голоса).

Попытка показать количество голосов в таблице голосов для благотворительности. У таблицы голосования есть FK к таблице благотворительности.

Я мог бы сделать это в SQL с левым соединением, но cGridView требует объект CActiveDataProvider для отображения данных, и я не уверен, как я могу объединить две таблицы, чтобы вернуть результат, который не только считается, но и не показывает любые результаты, которые равны 0 и упорядочены по голосам.

Я сейчас делаю:

в модели голосования:

public function relations()
{
    return array(
        'voteCount'=>array(self::STAT, 'Vote', 'charity_id'),
    );
}

charity_id - FK для таблицы благотворительности.

Затем, чтобы построить виджет CGridView:

$criteria=new CDbCriteria(array(
'with' => 'voteCount',
));

$dataProvider=new CActiveDataProvider('Charity', array(
    'pagination' => false,
    'criteria' => $criteria,
));

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'ajaxUpdate'=>true,
    'columns'=>array(
        'Name',
        array(
            'name'=>'vote.voteCount',
            'value'=>'CHtml::encode($data->voteCount)',
        ),
    ),
));

Сейчас он возвращает несколько результатов, и я не могу понять, как отсортировать и добавить предложение where.

Любая помощь?

Ответы [ 2 ]

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

Вам нужно внести незначительные изменения в

Vote.php (модель голосования)

public function relations()
{
    return array(
        'voteCount'=>array(self::STAT, 'Vote', 'charity_id'),
    );
}

Добавить поле в attributeLabels ()

'voteCount'=>'Votes',

и в CGridViewдобавить столбец «Голоса»

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'ajaxUpdate'=>true,
    'columns'=>array(
        'Name',
        'Votes',
    ),
));
0 голосов
/ 28 октября 2011

Попробуйте добавить в Благотворительную модель

public function relations()
{
    return array(
        'vote'=>array(self::HAS_ONE, 'Vote', 'charity_id'),
    );
}

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'ajaxUpdate'=>true,
    'columns'=>array(
        'Name',
        array(
            'name'=>'Vote Count',
            'value'=>'CHtml::encode($data->vote->voteCount)',
        ),
    ),
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...