2013-01-14 82 views
0

可以說,我有一個名爲數據提供程序來EExcelView

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字段與單表條目。 但情況出現時,我包括多個表

回答

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

+0

你知道爲什麼我只能得到10個值嗎?即數據提供者僅反映10個數據。 – TNC

+0

數據提供者的默認值是每十頁分頁。我的答案我已更新如何禁用分頁 – acorncom

+0

我可能有320行和60列..分頁不適用於那些巨大的..它適用於有限的數據表。任何解決方案..? – TNC

0

該作品對於2張桌子,不知道超過2人的作品。

$dataProvider = new CArrayDataProvider($dataprovider, array('id' => 'brand', 'sort' => array('attributes' => array('brand_name',),), 'pagination' => false)); 
$this -> render('doc', array('dataprovider' => $dataProvider,)); 
相關問題