【问题标题】:why when import excel, my data I added is not saved to the database used laravel为什么导入excel时,我添加的数据没有保存到使用laravel的数据库中
【发布时间】:2021-12-27 08:49:26
【问题描述】:

为什么导入excel时,我添加的数据没有保存到数据库中? 我用 xlsx 类型导入 excel

我的控制器

public function importDataPegawai(Request $request)
{
    Excel::import(new ImportPegawai, $request->file('upload-pegawai'));
    return redirect('dashboard-admin')->with('success','Berhasil Upload Data Pegawai');
}

我的导入

<?php

namespace App\Imports;

use App\Models\PegawaiModel;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithStartRow;
use Auth;
use DB;


class ImportPegawai implements ToModel, WithStartRow
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        foreach ($row as $data){
            $data = DB::table('tbl_pegawai')->where('nip', $row[0])->get();
            if (empty($data)) {
                return new PegawaiModel([
                    'nip'           => $row[0],
                    'nama_lengkap'  => $row[1],
                    'pangkat'       => $row[2],
                    'gol'           => $row[3],
                    'jabatan'       => $row[4],
                    'unit_kerja'    => $row[5]
                ]);
            }
        }
        
    }

    public function startRow(): int
    {
        return 3;
    }
}

当我 dd($data) 结果是这样的

result dd

我从我的 excel 上传中获得了数据。

有什么问题?为什么我的数据无法保存在数据库中

【问题讨论】:

    标签: excel laravel import


    【解决方案1】:

    此代码将返回一个Collection,即object,对象始终不为空。

    DB::table('tbl_pegawai')->where('nip', $row[0])->get();
    

    如果您切换到first(),它将返回modelnull,从而有效地执行您的意图。

    DB::table('tbl_pegawai')->where('nip', $row[0])->first();
    

    【讨论】:

    • 好像不行,现在excel中取不到数据的值,values (?, ?, ?, ?, ?, ?))
    • 我尝试使用 dd($row[0]) 并且得到了值,但是,为什么当我使用 'nip' => $row[0].我无法获得价值
    • 您是否在模型上将要填写的字段设置为$fillable?
    【解决方案2】:

    我以前遇到过这种情况,并认为这可能是由不同的因素引起的。您可能想尝试以下方法:

    1. 先将要上传的文件保存为Excel 97-2003 Workbook格式。
    2. 确保您要插入数据的列包含在protected $fillable 下的App\PegawaiModel 中。
    3. 如果电子表格中的某些单元格为空,请对其进行验证。

    例如

    if ($row[0] === null) { 
        $row = null;
    }
    

    或者如果它是一个不可为空的字符串列,你可以这样做

    if ($row[0] === null) { 
        $row = 'NO DATA'; 
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-14
      • 2020-08-13
      • 2019-05-03
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 2013-06-22
      • 1970-01-01
      相关资源
      最近更新 更多