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