2015-07-13 21 views
12

Bir excel dosyası yükleyebildiğim ve içeriği okuyabildiğim ve daha sonra bilgileri veritabanına yükleyebileceğim bu projeye sahibim. Bu yüzdenExcel dosyasını okuma ve veritabanına yükleme Laravel 5

Maatwebsite/Laravel-Excel olmaya dönüşür hangi bana yardım için bir kütüphane kullanmaya karar Ama belgelere http://www.maatwebsite.nl/laravel-excel/docs/import okuma çalıştı fakat ihtiyacım olanı bulmak için görünmüyor olabilir. ilk satırda John, Kennedy benim excel dosyasında Örneğin

, benim veritabanında First Name corrensponds Male , Last Name, Gender. Nasıl okuyabilir ve yükleyebilirim? Birisi bana yardım edebilir mi?

Teşekkürler! excel levha sütun adları verilen

public function postUploadCsv() 
{ 
    $rules = array(
     'file' => 'required', 
     'num_records' => 'required', 
    ); 

    $validator = Validator::make(Input::all(), $rules); 
    // process the form 
    if ($validator->fails()) 
    { 
     return Redirect::to('customer-upload')->withErrors($validator); 
    } 
    else 
    { 
     $file = Input::file('file'); 
     dd($file); 
     exit(); 
    } 
} 

cevap

19

bugün itibariyle

Kodum tam veritabanı sütun isimleri,

eklenti kontrolör sınıfının üstünde aşağıdaki yeterli durumdadır aşağıdaki gibi

use Maatwebsite\Excel\Facades\Excel; 

ve işlev kodu,

public function postUploadCsv() 
{ 
    $rules = array(
     'file' => 'required', 
     'num_records' => 'required', 
    ); 

    $validator = Validator::make(Input::all(), $rules); 
    // process the form 
    if ($validator->fails()) 
    { 
     return Redirect::to('customer-upload')->withErrors($validator); 
    } 
    else 
    { 
     try { 
      Excel::load(Input::file('file'), function ($reader) { 

       foreach ($reader->toArray() as $row) { 
        User::firstOrCreate($row); 
       } 
      }); 
      \Session::flash('success', 'Users uploaded successfully.'); 
      return redirect(route('users.index')); 
     } catch (\Exception $e) { 
      \Session::flash('error', $e->getMessage()); 
      return redirect(route('users.index')); 
     } 
    } 
} 

GÜNCELLEME

kullandığınız, daha bir çalışma kitabındaki bir sayfasına yerine, aşağıdaki gibi yaprak tekrarlatacak ek foreach olacak olan durumda

Excel::load(Input::file('file'), function ($reader) { 

    $reader->each(function($sheet) {  
     foreach ($sheet->toArray() as $row) { 
      User::firstOrCreate($row); 
     } 
    }); 
}); 

Read More

varsayalım Laravel 5.3 ve excel sayfalık sütunlarınızın tam olarak doğru olmadığı göz önünde bulundurulursa,

Aşağıdaki kod

yararlanın varsayılan tarafından bu ihtiyaçlarınızın tam öğretici here

Not

/** 

* Import file into database Code 

* 

* @var array 

*/ 

public function importExcel(Request $request) 

{ 


    if($request->hasFile('import_file')){ 

     $path = $request->file('import_file')->getRealPath(); 


     $data = Excel::load($path, function($reader) {})->get(); 


     if(!empty($data) && $data->count()){ 


      foreach ($data->toArray() as $key => $value) { 

       if(!empty($value)){ 

        foreach ($value as $v) {   

         $insert[] = ['title' => $v['title'], 'description' => $v['description']]; 

        } 

       } 

      } 




      if(!empty($insert)){ 

       Item::insert($insert); 

       return back()->with('success','Insert Record successfully.'); 

      } 


     } 


    } 


    return back()->with('error','Please Check your file, Something is wrong there.'); 

} 

kontrol dışarı uygun - Eğer excel levha verilerinizi kez özü çıkarıldı edilir tüm sütun isimleri dönüştürülür küçük harfle ve isimler arasındaki tüm boşluklar alt çizgi ile değiştirilir.

+0

Merhaba. Yardımınız için teşekkürler, cevabınızı görmeden önce sorunumu zaten çözdüm ama Kullanıcı :: firstOrCreate ($ row); daha temiz bir kod olmam için bana yardımcı oldu. $ customer-> title = $ value ['title'] gibi her değeri atamaktan; Teşekkürler! Bunu kabul edeceğim :) – jackhammer013

+0

Sevindim. –

+0

@pinkalvansia 2 ya da daha fazla sayfa varsa ne olur? Çünkü, kodunuza göre, foreach sadece ilk sayfayı alacak, değil mi? –