đượ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.
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
Vui vì tôi có thể giúp. –
@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? –