Reputation:
Using the docs from laravel-excel.com, I tried to implement a CSV import.
For some reason though, when I upload a .csv file, I get NULL records in my DB.
import.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">CSV Import</div>
<div class="panel-body">
<form class="form-horizontal" method="POST" action="{{ route('admin.import_parse') }}" enctype="multipart/form-data">
{{ csrf_field() }}
<div class="form-group{{ $errors->has('csv_file') ? ' has-error' : '' }}">
<label for="csv_file" class="col-md-4 control-label">CSV file to import</label>
<div class="col-md-6">
<input id="csv_file" type="file" class="form-control" name="csv_file" required>
@if ($errors->has('csv_file'))
<span class="help-block">
<strong>{{ $errors->first('csv_file') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<div class="checkbox">
<label>
<input type="checkbox" name="header" checked> File contains header row?
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-8 col-md-offset-4">
<button type="submit" class="btn btn-primary">
Parse CSV
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
importController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Contact;
use App\CsvData;
use App\Http\Controllers\Controller;
use App\Http\Requests\CsvImportRequest;
use App\Imports\DoctoranziImport;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
class ImportController extends Controller
{
public function getImport()
{
return view('import');
}
public function parseImport(Request $request)
{
Excel::import(new DoctoranziImport, $request->file('csv_file'));
return redirect('/')->with('success', 'Import finalizat!');
}
}
DoctoranziImport.php
<?php
namespace App\Imports;
use App\Student;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
class DoctoranziImport implements ToModel, WithHeadingRow
{
public function model(array $row)
{
// if (!isset($row['nume'])) {
// return null;
// }
if($row['universitate_absolvita_id']=="-1")
{
$alta_universitate_absolvita=$row['alta_universitate_absolvita'];
}
else{
$alta_universitate_absolvita=" ";
}
if($row['nume_liceu_absolvit']=="-1")
{
$alt_liceu_absolvit=$row['alt_nume_liceu_absolvit'];
}
else{
$alt_liceu_absolvit=" ";
}
/*if($row['facultate_absolvita_id']==-1){
$alta_facultate_absolvita=$row['alta_facultate_absolvita'];
}
else{
$alta_facultate_absolvita=" ";
}*/ //de decomentat atunci cand va fi adaugata coloana in excel
return new Student([
'nume' => $row['nume'],
'initiale' => $row['initiale'],
'prenume' => $row['prenume'],
'tip_act_identitate' => $row['tip_act_identitate'],
'cnp' => $row['cnp'],
'an_inmatriculare' => 2019,
'data_nastere' => $row['data_nastere'],
//'numar_legitimatie' => $row['numar_legitimatie'],
'prenume_tata' => $row['prenume_tata'],
'prenume_mama' => $row['prenume_mama'],
'nume_casatorie' => $row['nume_casatorie'],
'telefon' => $row['telefon'],
'email' => $row['email'],
'sex' => $row['sex'],
'nume_liceu_absolvit' => $row['nume_liceu_absolvit'],
'denumire_liceu_absolvit_strain' => $alt_liceu_absolvit,
'localitate_domiciliu_id' => $row['localitate_domiciliu_id'],
'judet_domiciliu_id' => $row['judet_domiciliu_id'],
'judet_nastere_id' => $row['judet_nastere_id'],
'localitate_nastere_id' => $row['localitate_nastere_id'],
'localitate_facultate_id' => $row['localitate_facultate_id'],
'numar_matricol' => $row['numar_matricol'],
'medie_admitere' => $row['medie_admitere'],
'persoana_cu_dizabilitati' => $row['persoana_cu_dizabilitati'],
'liceu_absolvit_id' => $row['liceu_absolvit_id'],
'localitate_liceu_absolvit_id' => $row['localitate_liceu_absolvit_id'],
'judet_liceu_absolvit_id' => $row['judet_liceu_absolvit_id'],
'an_absolvire_liceu' => $row['an_absolvire_liceu'],
'forma_inv_liceu_absolvit' => $row['forma_inv_liceu_absolvit'],
'act_identitate_serie' => $row['act_identitate_serie'],
'act_identitate_numar' => $row['act_identitate_numar'],
'eliberat_de' => $row['eliberat_de'],
'eliberat_data' => $row['eliberat_data'],
'etnia_id' => $row['etnia_id'],
'valabilitate_pana_la' => $row['valabilitate_pana_la'],
'date_diploma_seria' => $row['date_diploma_seria'],
'numar_diploma_bac' => $row['numar_diploma_bac'],
'an_emitere_diploma_bac' => $row['an_emitere_diploma_bac'],
'stare_sociala_speciala_id' => $row['stare_sociala_speciala_id'],
'tara_facultate_absolvita_id' => $row['tara_facultate_absolvita_id'],
'judet_facultate_absolvita_id' => $row['judet_facultate_absolvita_id'],
'localitate_facultate_absolvita_id' => $row['localitate_facultate_absolvita_id'],
'forma_invatamant_facultate_absolvita' => $row['forma_invatamant_facultate_absolvita'],
'universitate_absolvita_id' => $row['universitate_absolvita_id'],
'alta_universitate' => $alta_universitate_absolvita,
'an_absolvire_facultate' => $row['an_absolvire_facultate'],
'n_liceu_id' => $row['n_liceu_id'],
'date_diploma_localitate_emitent_id' => $row['date_diploma_localitate_emitent_id'],
'date_diploma_judet_emitent_id' => $row['date_diploma_judet_emitent_id'],
//'an_sesiune_bac' => $row['an_sesiune_bac'], //doar pentru studentii straini
//'adresa_numar' => $row['adresa_numar'], //doar pentru studentii straini
'candidat_olimpic' => $row['candidat_olimpic'],
'fost_student' => $row['fost_student'],
'absolvent' => $row['absolvent'],
'student_nr_ani_bugetat' => $row['student_nr_ani_bugetat'],
'absolvent_nr_ani_bugetat' => $row['absolvent_nr_ani_bugetat'],
'profil_liceu' => $row['profil_liceu'],
'serie_diploma_facultate' => $row['serie_diploma_facultate'],
'numar_diploma_facultate' => $row['numar_diploma_facultate'],
'forma_finantare_facultare' => $row['forma_finantare_facultare'],
'an_absolvire_master' => $row['an_absolvire_master'],
'durata_studii_facultate_master' => $row['durata_studii_facultate_master'],
'an_emitere_diploma_master' => $row['an_emitere_diploma_master'],
'program_specializare_facultate_master' => $row['program_specializare_facultate_master'],
'forma_finantate_facultate_master' => $row['forma_finantate_facultate_master'],
'nr_ani_bugetati_master' => $row['nr_ani_bugetati_master'],
'tara_liceu_id' => $row['tara_liceu_id'],
'durata_studii_facultate' => $row['durata_studii_facultate'],
'facultate_absolvita_id' => $row['facultate_absolvita_id'],
'nr_ani_bugetati_licenta' => $row['nr_ani_bugetati_licenta'],
'tara_facultate_master_id' => $row['tara_facultate_master_id'],
'judet_facultate_master_id' => $row['judet_facultate_master_id'],
'localitate_facultate_master_id' => $row['localitate_facultate_master_id'],
'universitate_master_id' => $row['universitate_master_id'],
'tara_nastere_id' => $row['tara_nastere_id'],
'strada_domiciliu' => $row['strada_domiciliu'],
'nr_strada_domiciliu' => $row['nr_strada_domiciliu'],
'bloc_domiciliu' => $row['bloc_domiciliu'],
'apartament_domiciliu' => $row['apartament_domiciliu'],
'cod_postal_domiciliu' => $row['cod_postal_domiciliu'],
'tara_domiciliu_id' => $row['tara_domiciliu_id'],
'program_specializare_facultate' => $row['program_specializare_facultate'],
'nr_diploma_facultate_master' => $row['nr_diploma_facultate_master'],
'facultate_master_id' => $row['facultate_master_id'],
'nota_disertatie' => $row['nota_disertatie'],
'medie_licenta' => $row['medie_licenta'],
'medie_ani_studiu_licenta' => $row['medie_ani_studiu_licenta'],
'medie_ani_studiu_master' => $row['medie_ani_studiu_master'],
'an_studiu' => 1,
'admis' => 1,
//'alta_facultate_absolvita' => $alta_facultate_absolvita, //de adaugat coloana in excel-ul pentru import
]);
}
}
If I do a dd($row) in the model function in DoctoranziImport, my array data looks okay. If I remove the dd and the code runs, my records in my DB is filled with null values and I don't know why.
Does anybody have any idea on why is this happening?
Upvotes: 0
Views: 874
Reputation:
For anybody having this problem, please make sure that on your model, you have the fields that you want to fill declared in the $fillable array. That's what I've been missing.
Upvotes: 0