'Laravel - Excel Import

I found the code from this website http://itsolutionstuff.com/post/laravel-56-import-export-to-excel-and-csv-exampleexample.html

This is my route after editing:

Route::post('barang', 'BarangController@importExcel')->name('barang');

This is their Controller, and I just Adding on foreach:

public function importExcel(Request $request)
{
    $request->validate([
        'import_file' => 'required'
    ]);

    $path = $request->file('import_file')->getRealPath();
    $data = Excel::load($path)->get();

    if($data->count()){
        foreach ($data as $key => $value) {
            $arr[] = [
                'kode_barang' => $value->kode_barang, 
                'nama_barang' => $value->nama_barang, 
                'kategori_id' => $value->kategori_id, 
                'jumlah_barang' => $value->jumlah_barang, 
                'harga_satuan' => $value->harga_satuan, 
                'tanggal_inputan' => $value->tanggal_inputan, 
                'deskripsi' => $value->deskripsi, 
                'status' => $value->status,

            ];
        }

        if(!empty($arr)){
            Item::insert($arr);
        }
    }

    return back()->with('success', 'Insert Record successfully.');
}

And I have Just Added this on my View:

<form action="{{ route('barang') }}" class="form-horizontal" method="post"
      enctype="multipart/form-data">
    @csrf

    @if ($errors->any())
    <div class="alert alert-danger">
        <a href="#" class="close" data-dismiss="alert"
           aria-label="close">×</a>
        <ul>
            @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
    @endif

    @if (Session::has('success'))
    <div class="alert alert-success">
        <a href="#" class="close" data-dismiss="alert"
           aria-label="close">×</a>
        <p>{{ Session::get('success') }}</p>
    </div>
    @endif
    <input type="file" name="import_file" />
    <button class="btn btn-primary">Import File</button>
</form>

The result show data has insert successfully, but nothing data has insert to my table.

Here is my excel CSV format

R4B6,MONITOR LENOVO,ELEKTRONIK,1,-,10/4/2018,-,Aktif

So, how to make the code right for insert into DB?



Solution 1:[1]

No need to use any third party library , you can use below function to download Excel file from your table .

protected function downloadEXCEL(Request $request){
        $table = User::orderBy('created_at','desc')->get();
        $filename = "output.xls";
        $handle = fopen($filename, 'w+');
        fputcsv($handle,array('user_email','mobile','country','state','address','zip_code','city'));
        foreach($table as $row) {
            fputcsv($handle,array(
                $row['user_email'],
                $row['mobile'],
                $row['country'],
                $row['state'],
                $row['address'],
                $row['zip_code'],
                $row['city']
            ));
        } 

        fclose($handle);
        $headers = array('Content-type'=> 'application/vnd.ms-excel');
        return response()->download($filename,'output.xls',$headers);
    }

Solution 2:[2]

First of all please change your code is as follows:

if($data->count()){
    foreach ($data as $key => $value) {
        $arr[] = [
            'kode_barang' => $value->kode_barang, 
            'nama_barang' => $value->nama_barang, 
            'kategori_id' => $value->kategori_id, 
            'jumlah_barang' => $value->jumlah_barang, 
            'harga_satuan' => $value->harga_satuan, 
            'tanggal_inputan' => $value->tanggal_inputan, 
            'deskripsi' => $value->deskripsi, 
            'status' => $value->status
        ];
    }
    if(!empty($arr)){
        Item::insert($arr);
        return back()->with('success', 'Insert Record successfully.');
    }else{
        return back()->with('error', 'Failed to insert record.');
    }
}

Then try debugging your code why records are not inserted.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Saurabh Mistry
Solution 2 Someshwer Bandapally