0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ExcelからインポートするSeederの実行時にErrorException : Undefined index: idのエラーになるとき

Last updated at Posted at 2019-12-05

問題

ExcelからデータインポートをするSeederの実行時に、以下のエラーが発生した。 インポートするExcelファイルの1行目には、カラム名を指定している。

エラー内容は以下のとおり。

ErrorException  : Undefined index: id

 at /var/www/csi/app/Imports/QuestionImport.php:20
    17|     public function model(array $row)
    18|     {
    19|         return new Question([
  > 20|             'id'                    => $row['id'],
    21|             'question_en'           => $row['question_en'],
    22|             'question_jp'           => $row['question_jp'],

Exception trace:

  1   Illuminate\Foundation\Bootstrap\HandleExceptions::handleError("Undefined index: id", "/var/www/csi/app/Imports/QuestionImport.php", [])
      /var/www/csi/app/Imports/QuestionImport.php:20

  2   App\Imports\QuestionImport::model()
      /var/www/csi/vendor/maatwebsite/excel/src/Imports/ModelManager.php:73

  Please use the argument -v to see more details.

原因

Importクラスで、implementsにWithHeadingRowを指定していなかった。

(例)QuestionImport.php

class QuestionImport implements ToModel
{
    public function model(array $row)
    {
        return new Question([
            'id'                    => $row['id'],
            'question_en'           => $row['question_en'],
            'question_jp'           => $row['question_jp'],
        ]);
    }
}

解決方法

Importクラスで、implementsにWithHeadingRowを指定する。

(例)QuestionImport.php

use Maatwebsite\Excel\Concerns\WithHeadingRow;

class QuestionImport implements ToModel, WithHeadingRow
{
    public function model(array $row)
    {
        return new Question([
            'id'                    => $row['id'],
            'question_en'           => $row['question_en'],
            'question_jp'           => $row['question_jp'],
        ]);
    }
}

【参考】解決のために試したこと

20行目でエラーが出ていたので、18行目と19行目の間に ```dd($row);``` を入れてみた。

ddの出力結果↓

array:6 [
  0 => "id"
  1 => "question_en"
  2 => "question_jp"
]

1行目(ヘッダー行)もデータとして$rowに格納されていることが判明。これによりWithHeadingRowの指定漏れが原因と特定した。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?