2015-07-13 15 views
12

Tôi có dự án này, nơi tôi có thể tải lên tệp excel và đọc nội dung rồi tải thông tin lên cơ sở dữ liệu. Vì vậy, tôi đã quyết định sử dụng một thư viện để giúp tôi ra phiên bản nào là Maatwebsite/Laravel-ExcelĐọc tệp excel và tải lên cơ sở dữ liệu Laravel 5

Nhưng tôi đã thử đọc tài liệu http://www.maatwebsite.nl/laravel-excel/docs/import nhưng dường như tôi không thể tìm thấy tài liệu tôi cần.

Ví dụ trong file excel của tôi trong hàng đầu tiên John, Kennedy, Male đó trong cơ sở dữ liệu của tôi corrensponds First Name, Last Name, Gender. Tôi có thể đọc và tải lên bằng cách nào? Ai đó có thể giúp tôi?

Cảm ơn!

Mã của tôi như bây giờ

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(); 
    } 
} 

Trả lời

19

được đặt tên cột sheet excel của bạn được chính xác như tên cột cơ sở dữ liệu sau đây là đủ,

add sau trên lớp điều khiển,

use Maatwebsite\Excel\Facades\Excel; 

và mã chức năng,

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')); 
     } 
    } 
} 

CẬP NHẬT

Giả sử bạn có nhiều hơn một tấm trong một bảng tính, bạn sẽ có thêm foreach để lặp qua tờ như dưới đây,

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

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

Read More

Trong trường hợp bạn đang sử dụng Laravel 5.3 và cho rằng các cột bảng tính excel của bạn không chính xác

Make sử dụng đoạn mã sau để phù hợp với nhu cầu của bạn

/** 

* 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.'); 

} 

Kiểm tra đầy đủ các hướng dẫn here

Lưu ý rằng theo mặc định - Khi dữ liệu của bạn được extacted từ bạn nổi trội tờ, tất cả các tên cột được chuyển đổi để viết hoa chữ thường và tất cả dấu cách giữa các tên được thay thế bằng dấu gạch dưới.

+0

Xin chào. Cảm ơn sự giúp đỡ, tôi đã cố định vấn đề của tôi trước khi tôi nhìn thấy câu trả lời của bạn nhưng User của bạn :: firstOrCreate ($ row); đã giúp tôi có một mã sạch hơn. hơn là chỉ định mỗi giá trị như $ customer-> title = $ value ['title']; Cảm ơn! Tôi sẽ chấp nhận điều này :) – jackhammer013

+0

Vui vì tôi có thể giúp. –

+0

@pinkalvansia nếu có từ 2 trang trở lên thì sao? Bởi vì, theo mã của bạn, 'foreach' sẽ chỉ lấy tờ đầu tiên, đúng không? –

Các vấn đề liên quan