Maatwebsite/Laravel-Excelを2.1から3.1にアップグレードしました。一部のメソッドは非推奨です。
これがバージョン2.1のコードです。
$data = Excel::load($path, function($reader) {})->get()->toArray();
2.1を使用した場合は機能しますが、アップグレードした後はエラーになります
未定義のメソッドMaatwebsite\Excel\Excel :: load()の呼び出し
バージョン3.1の場合、次のように変更しようとしました
$data = Excel::import($path, function($reader) {})->get()->toArray();
私はこれがおそらく正しい構文ではないことを知っています。
ここに2.1を使用して開発するときの私の完全なコードがあります。
$path = $request->file('csv_file')->getRealPath();
if ($request->has('header')) {
$data = Excel::import($path, function($reader) {})->get()->toArray();
} else {
$data = array_map('str_getcsv', file($path));
}
if (count($data) > 0) {
if ($request->has('header')) {
$csv_header_fields = [];
foreach ($data[0] as $key => $value) {
$csv_header_fields[] = $key;
}
}
$csv_data = array_slice($data, 0, 8);
$csv_data_file = CsvData::create([
'csv_filename' => $request->file('csv_file')->getClientOriginalName(),
'csv_header' => $request->has('header'),
'csv_data' => json_encode($data)
]);
} else {
return redirect()->back();
}
return view('import.import_field', compact( 'csv_header_fields', 'csv_data', 'csv_data_file'));
バージョン3.1でこのエラーを修正するにはどうすればよいですか?
実際には、Maatwebsite/Laravel-Excelバージョン3でExcelインポート用に追加のクラスを作成する必要はありません。基本的に、バージョン2とほぼ同じ方法でCSVから配列への変換全体を実行できます。
$path = $request->file('csv_file')->getRealPath();
$data = \Excel::toArray('', $path, null, \Maatwebsite\Excel\Excel::TSV)[0];
import()
メソッドの最初のパラメーターは、3.1ではファイルへのパスではなく、作成する必要のあるインポートファイルのクラス名です。
このインポートファイルでは、シートの読み取り方法と、シートを変換する形式(モデルやコレクションなど)を定義できます。
2.1から3.1に移行する最も簡単な方法は、(あなたの場合)を実行してそのようなImportクラスを作成することです。
php artisan make:import CsvDataImport
質問のコードのように、すべての行を一度に読み取りたい場合は、インポートファイルでToCollection
懸念事項を使用できます。
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
class CsvDataImport implements ToCollection
{
public function collection(Collection $rows)
{
// Use the $rows collection to create your CsvData model.
}
}
コントローラでは、次のようにインポートを呼び出すことができます。
use App\Imports\CsvDataImport;
use Maatwebsite\Excel\Excel;
Excel::import(new CsvDataImport, $path);
コレクションへのインポートについて詳しく読むことができます ここ
ダウングレードに戻らないでください。最も簡単なインポート方法で、新しい更新バージョン("maatwebsite/Excel": "〜3.1.0")を簡単に使用できます。
Composer.jsonを更新します。
"require": {
**"maatwebsite/Excel": "~3.1.0"**
},
php artisan make:import UsersImport
App\imports\UserImport.phpにインポートを作成します
<?php
namespace App\Imports;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
class UserImport implements ToCollection,WithHeadingRow
{
public function collection(Collection $rows)
{
return $rows;
}
// headingRow function is use for specific row heading in your xls file
public function headingRow(): int
{
return 3;
}
}
?>
コントローラファイル内。
use Excel;
public function importExcel(Request $request) {
$import = new UsersImport();
$data = \Excel::import($import, request()->file('import_file'));
}