🦔
Laravel Excelの空行スキップでハマったときの対処法
はじめに
Laravel Excelで空行をスキップしようとしてハマったので対処法を残します!
環境
- php 8.2
- Laravel 11.23
- Laravel Excel 3.1.58
現象
ExcelファイルをDBのテーブルに保存するシステムを作っており、SkipsEmptyRowsを使って空行をスキップしていました
class UserImport implements ToModel, SkipsEmptyRows, WithStartRow, ...
...
// 一行目がヘッダーなので除外
public function startRow(): int
{
return 2;
}
うまくいく分
-
以下のようなExcelファイルならスキップできていました
-
正しく4行目がスキップされてインポートされます
問題がおきた分
見た目だとわかりにくいですが、以下のようなデータが複数行にまたがっているExcelファイルだと2行目で Not null violation
が発生してしまいました。2行A列、2行B列などはnull扱いになっているようです
※bio列はテーブルに取り込む必要はないとします
※name, emailはNot nullです
対処
以下を追記するとnullの部分がスキップされてインポート成功しました
public function isEmptyWhen(array $row): bool
{
return $row['email'] === null;
}
インポート分
最後に
ブラウザ版のExcelからファイルを見ると各行にデータが入っていましたが、デスクトップ版だと複数行にまたがっていました…表示のされ方が違うんですね(ずっとブラウザ版を見ており気づけず)
色々トラップがあったので勉強になりました!!
Discussion