Php Yii CGridView和SQL计数

Php Yii CGridView和SQL计数,php,sql,yii,Php,Sql,Yii,我试图加载一个cGridView,其中包含两个表(慈善和投票)之间的查询结果 试图显示慈善机构投票表中的票数。投票表与慈善表之间有一个FK 我可以使用左联接在SQL中实现这一点,但cGridView需要一个CActiveDataProvider对象来显示数据,我不确定如何联接两个表以返回一个结果,该结果不仅计数,而且不显示任何等于0且按投票顺序排列的结果 我目前正在做: 在投票模式中: public function relations() { return array(

我试图加载一个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子句


有什么帮助吗?

尝试添加到慈善模式

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

你需要在这方面做一些小的改变

Vote.php(投票模型)

在attributeLabels()中添加字段

并在CGridView中添加“投票”列

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'ajaxUpdate'=>true,
    'columns'=>array(
        'Name',
        'Votes',
    ),
));

对于记录,您不必使用CActiveDataProvider,也可以使用CSqlDataProvider,但根据文档,当然CActiveDataProvider是首选。我不太擅长使用条件,但您肯定可以向条件添加条件,如-
$criteria->condition='voteCount>0'
'voteCount'=>'Votes',
$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'ajaxUpdate'=>true,
    'columns'=>array(
        'Name',
        'Votes',
    ),
));