Yii CGridView和SQL Count

时间:2011-10-27 23:02:13

标签: php sql yii

我正在尝试使用两个表(慈善机构和投票)之间的查询结果加载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 :(得分:0)

尝试添加到慈善模式

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)',
        ),
    ),
));

答案 1 :(得分:0)

您需要进行一些小改动

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',
    ),
));