假设我有一个名为
的表cars{
'id','name','brand_id',
}
和另一张表
brand{
'id','brand_name',
}
我想要生成具有以下属性的 Excel报告。
'name','brand_name'
即SELECT cars.name, brand.brand_name FROM cars INNER JOIN on brand WHERE cars.brand_id = brand.id
所以我创建了一个像这样的数据提供者:
$sql = "SELECT cars.name, brand.brand_name FROM cars INNER JOIN brand on cars.brand_id = brand.id";
$result = Yii::app()->db->createCommand($sql)->queryAll();
$this->render('doc', array('dataprovider' => $result));
现在我想生成Excel文件,结果为dataProvider
,所以我写下面的代码:
//让我说我在名为doc.php的视图页面中执行此操作
$factory = new CWidgetFactory();
Yii::import('ext.eexcelview.EExcelView',true);
$widget = $factory->createWidget($this,'EExcelView', array(
'dataProvider'=>$dataprovider->search(),
'grid_mode'=>'export',
'title'=>'Title',
'creator'=>'TNC',
'autoWidth'=>false,
'filename'=>'Report.xlsx',
'stream'=>false,
'disablePaging'=>false,
'exportType'=>'Excel2007',
'columns'=>array(
'name',
'brand_name',),
'showTableOnEmpty' => false,
));
$widget->init();
$widget->run();
我已经包含了我必须使用的所有扩展程序。。当我使用单个表条目为dataProvider
字段提供信息时,此代码正常工作。
但是当我包含多个表时会出现这种情况。
答案 0 :(得分:2)
这些行实际上并不构成数据提供者:
$result = Yii::app()->db->createCommand($sql)->queryAll();
$this->render('doc', array('dataprovider' => $result));
您需要执行以下操作:
$dataprovider = new CSqlDataProvider($sql, array(
'pagination'=>false,
);
$this->render('doc', array('dataprovider' => $dataprover);
此处有更多信息:http://www.yiiframework.com/doc/api/1.1/CSqlDataProvider
答案 1 :(得分:0)
这适用于2个表,不知道是否超过2个。
$dataProvider = new CArrayDataProvider($dataprovider, array('id' => 'brand', 'sort' => array('attributes' => array('brand_name', ), ), 'pagination' => false));
$this -> render('doc', array('dataprovider' => $dataProvider,));