2013-04-16 12 views
5

का उपयोग कर सीएसवी में पूरी तालिका निर्यात करें मैं लार्वेल के लिए नया हूं और एक टेबल को सीएसवी में निर्यात करने का एक तरीका ढूंढ रहा हूं। मैं नियंत्रक वर्ग में निम्न कोड की कोशिश की है, लेकिन यह मुझे एक त्रुटि देता है: Cpmreport के लिएलार्वेल

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

की संभावित डुप्लिकेट [उपयोग 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

आपके लिए बहुत धन्यवाद, यह समाधान ठीक काम करता है। – 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 = foreach के अंदर अंतिम मान – Hontoni

+0

नोट करें कि यह '$ table' प्राप्त करने के लिए एक वाणी संग्रह क्वेरी की आवश्यकता है। एक 'डीबी: :(' 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 रिकॉर्ड हैं लेकिन लार्वेल 5 –

+0

का उपयोग करके लगभग 3-4 मिनट लगते हैं। इसमें इतना समय नहीं लगता है। फ़ाइल अनुमतियों के साथ समस्या हो सकती है? @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');