user14399919
user14399919

Reputation:

CSV Import fills the records with NULL, for some reason

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

Answers (1)

user14399919
user14399919

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

Related Questions