【问题标题】:How To Import Export to Excel In Laravel如何在 Laravel 中导入导出到 Excel
【发布时间】:2019-03-12 16:50:18
【问题描述】:

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

结果如下:

但是,它显示记录成功插入,但数据没有插入我的表中

这是我的 Excel CSV 格式...

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

我什至尝试改变Item ...

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

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

【问题讨论】:

  • dd(Excel::load($path)-&gt;get()); 得到什么?
  • RowCollection {#673 ▼ #heading: array:8 [▼ 0 => "r4b6" 1 => "monitor_lenovo" 2 => "1" 3 => "1" 4 => "" 5 => "1082018" 6 => "" 7 => "aktif" ] #title: "Worksheet" #items: [] }
  • 我认为这篇参考文章的回答将有助于完整的This
  • 包名是什么?
  • maatwebsite/excel

标签: php excel laravel web-scraping laravel-5.7


【解决方案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.');

干杯

【讨论】:

  • Item::insert($rows) 上存在一些问题,显示此错误“未找到 Class 'App\Http\Controllers\Item'”。是那个型号?如果这是真的,我尝试将其更改为我的模型。然后显示此错误“传递给 Illuminate\Database\Query\Builder::insert() 的参数 1 必须是数组类型,给定对象,在 C:\xampp\htdocs\Laravel\testing\vendor\laravel\ 中调用framework\src\Illuminate\Database\Eloquent\Builder.php 第 1283 行“
  • 老兄,你需要导入 Item 类
  • 你的意思是这个? "找不到类 'League\Fractal\Resource\Item'"
  • 你想做什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
  • 2020-10-11
  • 2021-09-15
  • 2015-11-24
相关资源
最近更新 更多