Export whole table to CSV using laravel
29,659
Solution 1
fputcsv($file, $table);
should be fputcsv($file, $row)
, shouldn't it?
And convert the object to an array using Eloquent's to_array()
method: 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');
}
Solution 2
Easy way
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);
});
Solution 3
Select query of MySQL data.
$data = \DB::connection('mysql')->select($select);
Call following function:
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 Million records takes 1 second to create.
Author by
Admin
Updated on July 05, 2022Comments
-
Admin almost 2 years
I am new to laravel and having a tough time figuring out a way to export one table to csv. I have tried the following code in the controller class, but it gives me an error:
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'); }
Model Class for Cpmreport:
class Cpmreport extends Eloquent { public static $table='cpm_report'; }
The error :
Message: fputcsv() expects parameter 2 to be array, object given Location: C:\xampp\htdocs\cpm_report\application\controllers\cpmreports.php on line 195
Any help would be appreciated.