Laravel Excel 3.1 выдает ошибку «свойство не имеет значения по умолчанию», несмотря на успешный импорт - PullRequest
0 голосов
/ 21 марта 2019

Я использую пакет Laravel Excel для массовой загрузки. Несмотря на то, что я могу успешно загрузить данные, моя веб-консоль указывает и выдает ошибку, что «staff_id» не имеет значения по умолчанию. Я пытался поймать это как исключение, но это не срабатывает. Я использую импорт ToModel, как указано ниже

class EmployeesImport implements ToModel, WithHeadingRow
{
    public function model(array $row)
    {
        try {
            return new Employee([
                'staff_id' => $row['staff_id'],
                'first_name' => $row['first_name'],
                'middle_name' => $row['middle_name'],
                'last_name' => $row['last_name'],
                'national_id' => (string) $row['national_id'],
                'department_id' => 1,
            ]);
        } catch (\Exception $e) {
            dd($e->getMessage(), $row);
        }
    }
}

CSV Im импорта имеет следующую структуру

Excel that Im importing with input name ('bulk')

В моем контроллере у меня есть это, чтобы превысить загрузку / импорт

Excel::import(new EmployeesImport(), request()->file('bulk'));

И, наконец, это моя Модель сотрудников, показывающая заполняемые поля

class Employee extends Model
{
    use SoftDeletes;

    protected $table = "employees";

    protected $fillable = [
        "staff_id", "first_name", "middle_name", "last_name", "national_id", "department_id", "avatar"
    ];
}

(И последнее.) Если это может иметь значение - мой метод переноса файла up

public function up()
{
    Schema::create('employees', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('staff_id')->unique();
        $table->string('first_name');
        $table->string('middle_name')->nullable();
        $table->string('last_name');
        $table->string('national_id')->unique();
        $table->unsignedBigInteger('department_id');
        $table->longText('avatar')->nullable();
        $table->timestamps();
        $table->softDeletes();

        //Foreign keys
        $table->foreign('department_id')->references('id')->on('departments')->onDelete('cascade');
    });
}

1 Ответ

0 голосов
/ 22 марта 2019

В соответствии с документацией вы можете отловить ошибки в концеend

Сбор всех сбоев в конце

Вы можете собрать все сбои проверки в конце импорта, если они используются в сочетании с пакетными вставками.Вы можете попробовать поймать исключение ValidationException.В этом исключении вы можете получить все сбои.

Каждый сбой является экземпляром Maatwebsite \ Excel \ Validators \ Failure.Ошибка содержит информацию о том, какая строка, какой столбец и каковы ошибки проверки для этой ячейки.

try {
    // import code
} catch (\Maatwebsite\Excel\Validators\ValidationException $e) {
     $failures = $e->failures();

     foreach ($failures as $failure) {
         $failure->row(); // row that went wrong
         $failure->attribute(); // either heading key (if using heading row concern) or column index
         $failure->errors(); // Actual error messages from Laravel validator
         $failure->values(); // The values of the row that has failed.
     }
}
...