2

我在itsolutionstuff.com网站上找到了这段代码。

我用这个...

Route::post('importExcel', 'MaatwebsiteDemoController@importExcel');

并将其挂起以使用我的路线...

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

对于控制器,我选择了这段代码,因为我需要它......

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[] = ['title' => $value->title, 'description' => $value->description];
        }

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

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

然后我根据我的桌子设计改变了它......

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.');
}

我也将此添加到我的视图中...

<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>

这是结果:
在此处输入图像描述

但是,它说Record Successfully Inserted,但是数据没有插入我的表中在此处输入图像描述

这是我的 Excel CSV 格式...
在此处输入图像描述

为什么数据没有插入数据库?我的代码中是否还有错误/不完整/拼写错误?

我什至试图改变项目......

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

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

... to Barang仍然告诉我它是成功的,没有数据被插入到数据库中。

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

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

如果您不理解我说的某些话,我深表歉意。感谢您的关注。

4

1 回答 1

1

确保你的 csv 有一个标题。Maatwebsite\Excel\Excel将抓取第一行作为标题,然后其余的将是您的项目。

你的 csv 有一行

R4B6, MONITOR LENOVO, ELEKTRNIK, 1,-,10/4/2018,-,Aktif` 

并且该类认为它是一个标头并返回以下对象。如您所见,项目似乎为空。

RowCollection {#722 ▼
  #heading: array:8 [▶]
  #title: "Worksheet"
  #items: []
}

但如果添加标题

heading1,heading2,heading3,heading4,heading5,heading6,heading7,heading8,
R4B6, MONITOR LENOVO, ELEKTRNIK, 1,-,10/4/2018,-,Aktif

返回以下对象

RowCollection {#730 ▼
  #heading: array:8 [▼
  0 => "heading1"
  1 => "heading2"
  2 => "heading3"
  3 => "heading4"
  4 => "heading5"
  5 => "heading6"
  6 => "heading7"
  7 => "heading8"
]
#title: "Worksheet"
#items: array:1 [▼
  0 => CellCollection {#736 ▶}
]}

您还可以通过在控制器中这样做来使您的代码更好

$path = $request->file('import_file')->getRealPath();

$rows = collect(Excel::load($path)->get())->map(function ($row) {
    return [
        'kode_barang' => $row->heading1,
        'nama_barang' => $row->heading2,
        'kategori_id' => $row->heading3,
        'jumlah_barang' => $row->heading4,
        'harga_satuan' => $row->heading5,
        'tanggal_inputan' => $row->heading6,
        'deskripsi' => $row->heading7,
        'status' => $row->heading8,
      ];
    });

Item::insert($rows);

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

干杯

于 2018-10-08T06:20:18.320 回答