我正在尝试使用两个表(慈善机构和投票)之间的查询结果加载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子句。
任何帮助?
答案 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',
),
));