Leyendo el archivo de excel y subiéndolo a la base de datos Laravel 5
import laravel-5 (1)
Tengo este proyecto donde debería poder cargar un archivo de Excel y leer el contenido y luego cargar la información a la base de datos. Así que decidí usar una biblioteca para ayudarme, que se convierte en Maatwebsite/Laravel-Excel
Pero intenté leer la documentación http://www.maatwebsite.nl/laravel-excel/docs/import pero parece que no puedo encontrar la que necesito.
Por ejemplo, en mi archivo de Excel en la primera fila John
, Kennedy
, Male
, que en mi base de datos corrige el First Name
, el Last Name
y el Gender
. ¿Cómo puedo leerlo y subirlo? ¿Alguien me puede ayudar?
¡Gracias!
Mi código a partir de ahora
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();
}
}
dado que los nombres de las columnas de la hoja de Excel son exactamente los nombres de las columnas de la base de datos a continuación,
agregar lo siguiente clase de controlador,
use Maatwebsite/Excel/Facades/Excel;
y código de función,
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''));
}
}
}
ACTUALIZAR
Supongamos que tiene más de una hoja en un libro de trabajo, tendrá foreach
adicional para repetir cada hoja como se muestra a continuación.
Excel::load(Input::file(''file''), function ($reader) {
$reader->each(function($sheet) {
foreach ($sheet->toArray() as $row) {
User::firstOrCreate($row);
}
});
});
http://www.maatwebsite.nl/laravel-excel/docs/import
En caso de que esté utilizando Laravel 5.3 y dado que las columnas de la hoja de Excel no son exactas
Utilice el siguiente código para satisfacer sus necesidades
/**
* 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.'');
}
Mira el tutorial completo here
Tenga en cuenta que, de forma predeterminada, una vez que sus datos se extienden de su hoja de Excel, todos los nombres de las columnas se convierten a minúsculas, y todos los espacios entre los nombres se reemplazan con guiones bajos.