Yii: 在CGridView控件中使用数组做为数据源
在某些场合下,表格数据来自于多个没有直接关联关系的表格,并且需要经过合并,分解以及更多复杂的处理。
通常是做统计报告的时候需要这样处理,这时,CGridView支持的CActiveRecordProvider就不够用了(当然也可以通过生成中间表来处理)。
Yii中提供了另外一种更加灵活的方式来使用CGridView,即通过数组数据来提供数据源。
具体方法是首先构造出数组数据,然后转换为framework/web/CArrayDataProvider对象,然后传递给CGridView的dataProvider属性。
1、控制器中:
$deals = Yii::app()->db->createCommand("select id, `phone`, count(`id`) as count from
".Deal::tableName()." WHERE `phone` = $keyword AND `status`=1 GROUP BY `phone`;")->queryAll();
$vendors = Yii::app()->db->createCommand("select id, `phone`, count(`id`) as count from
".Vendor::tableName()." WHERE `phone` = $keyword AND `status`=1 GROUP BY `phone`;")->queryAll();
$data = array_merge($deals,$vendors);
$repdp = new CArrayDataProvider($data, array(
"id"=>"report",
"sort"=>array(
"attributes"=>array(
"count",
),
),
"pagination"=>array(
"pageSize"=>10,
),
));
$this->render("List", array("repdp"=>$repdp)); 2、视图中:
<?php
$this->widget("application.extensions.grid.CGridView", array(
"id"=>"ugcrep-grid",
"dataProvider"=>$repdp,
"columns"=>array(
"phone",
"count",
)
));?>如果想进一步使用过滤器filter,由于缺少对应的数据模型,得自行创建一个model对象,具体方法可参见参考文档2。
也可以简单点在表格外创建一个专门的搜索表单,然后处理相应的搜索逻辑即可。
by iefreer
参考:
http://stackoverflow.com/questions/9538777/using-an-array-as-the-data-source-for-cgridview
http://www.yiiframework.com/forum/index.php/topic/16435-cgridview-filters-with-carraydataprovider/
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
