0

という名前のテーブルがあるとしましょう

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フィールドに単一のテーブルエントリを入力したときに機能します。しかし、複数のテーブルを含めると状況が発生します。

4

2 に答える 2

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

于 2013-01-14T11:41:46.190 に答える
0

これは 2 つのテーブルで機能しますが、2 つ以上のテーブルで機能するかどうかはわかりません。

$dataProvider = new CArrayDataProvider($dataprovider, array('id' => 'brand', 'sort' => array('attributes' => array('brand_name', ), ), 'pagination' => false));
$this -> render('doc', array('dataprovider' => $dataProvider,));
于 2013-01-15T07:58:52.140 に答える