2013-04-16 9 views
5

私はlaravelの新機能で、1つのテーブルをcsvにエクスポートする方法を理解するのに苦労しています。 私はコントローラクラスに次のコードを試してみましたが、それは私にエラーを与える:Cpmreportためlaravelを使用してテーブル全体をCSVにエクスポート

public function get_export() 
{ 
    $table = Cpmreport::all(); 
    $file = fopen('file.csv', 'w'); 
    foreach ($table as $row) { 
     fputcsv($file, $row); 
    } 
    fclose($file); 
    return Redirect::to('consolidated'); 
} 

モデルクラス:

class Cpmreport extends Eloquent 
    { 
     public static $table='cpm_report'; 
    } 

エラー:

Message: 

    fputcsv() expects parameter 2 to be array, object given 

    Location: 

    C:\xampp\htdocs\cpm_report\application\controllers\cpmreports.php on line 195 

すべてのヘルプを感謝されます。

+0

[CSVとして表をダウンロードするために使用Laravel](http://stackoverflow.com/questions/26146719/use-laravel-to-download-table-as-csv)の可能性の重複に - また、HTTPSを参照してください。 //meta.stackexchange.com/a/147651/321521 –

答えて

7

fputcsv($file, $table);fputcsv($file, $row)である必要があります。

そして雄弁のto_array()方法使用してオブジェクトを配列に変換します。http://laravel.com/docs/database/eloquent#to-array

public function get_export() 
{ 
    $table = Cpmreport::all(); 
    $file = fopen('file.csv', 'w'); 
    foreach ($table as $row) { 
     fputcsv($file, $row->to_array()); 
    } 
    fclose($file); 
    return Redirect::to('consolidated'); 
} 
+0

はい、申し訳ありませんが、それはタイプミスでしたが、それでもまだ$行で動作していません – Anuj

+0

Eloquentの 'to_array()'メソッドを見てみましょう。 http://laravel.com/docs/database/eloquent#to-array – sqwk

+0

sqwkありがとうございました。このソリューションは正常に動作しました。 – Anuj

18

簡単な方法

Route::get('/csv', function() { 
    $table = Cpmreport::all(); 
    $output=''; 
    foreach ($table as $row) { 
     $output.= implode(",",$row->toArray()); 
    } 
    $headers = array(
     'Content-Type' => 'text/csv', 
     'Content-Disposition' => 'attachment; filename="ExportFileName.csv"', 
); 

    return Response::make(rtrim($output, "\n"), 200, $headers); 
}); 
+1

$ output = inside foreachは最後の値を取得します – Hontoni

+0

これは、 '$ table'を得るために雄弁なコレクションクエリが必要であることに注意してください。 DB::('tablename') 'クエリは雄弁なクエリとして実行される必要があります。モデルが作成されていれば、まだ作成されていません。 –

+0

これは役に立ちます! ありがとうございます! –

2

MySQLデータの選択クエリを。

$data = \DB::connection('mysql')->select($select); 

コール次の関数:

query_to_csv($data, 'data.csv'); 

function data_to_csv($data, $filename) 
    { 
     $fp = fopen($filename, 'w'); 
     foreach ($data as $row) { 
      fputcsv($fp, $row); 
     } 

     fclose($fp); 
    } 

0.1万レコードを作成するには1秒かかります。

+0

私は5000レコードを持っていますが、Laravel 5を使って3〜4分ほどかかります。 –

+0

それほど時間はかかりません。ファイルのアクセス許可に問題がある可能性がありますか? @tiGer –

+0

私はファイルを直接ダウンロードしていますが、ファイルのアクセス許可については理解していませんでした。 –

0

これはより簡単で簡単です。

$file_name = "abc"; 
$postStudent = Input::all(); 
$ck = DB::table('loan_tags')->select('LAN')->where('liabilitiesId', $postStudent['id'])->get(); 
$i = 0; 
foreach ($ck as $row) { 

       $apps[$i]['LAN'] = $row->LAN; 
      $apps[$i]['Account_number'] = $postStudent['account_number']; 
      $apps[$i]['Bank_Name'] = $postStudent['bank_name']; 
      $i++; 
} 

ob_end_clean(); 
ob_start(); 
Excel::create($file_name, function($excel) use($apps){ 
     $excel->sheet('Sheetname', function($sheet) use($apps){ 

      $sheet->row(1, array(
       'LAN', 'Account number' , 'Bank Name' 
      )); 
      $k = 2; 
      foreach ($apps as $deta) { 
       $sheet->row($k, array($deta['LAN'], $deta['Account_number'], $deta['Bank_Name'] 
       )); 
       $k++; 
      } 
     }); 
    })->download('xlsx'); 
関連する問題