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.

Share:
29,659
Admin
Author by

Admin

Updated on July 05, 2022

Comments

  • Admin
    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.