I have prepared code below, and I’m using the dump
to trace if it passed to models’ create
function.
When I checked in the database there is no data added, I’m just wondering why it does not have when it is already passed in User::create
function (verified by string “created” below in the picture).
These are the dump datas returned (note: i’m using picture for better visualization)
And here is my code in UserImport.php
public function model(array $row) { User::create([ 'name' => $row[0], 'birthdate' => $row[1], 'gender' => $row[2], ]); dump('created'); } public function rules(): array { return [ '1' => ['required'], '2' => ['required'], ]; }
And about dumping the validations message is my UserController (to shorten, i will just post the important parts)
catch (MaatwebsiteExcelValidatorsValidationException $e) { $failures = $e->failures(); dd($failures); }
Advertisement
Answer
This is the expected behavior. Laravel Excel uses database transactions to ensure data integrity when performing imports. You have failures, so the entire transaction was rolled back.
https://docs.laravel-excel.com/3.1/imports/validation.html#database-transactions
#Database transactions
The entire import is automatically wrapped in a database transaction, that means that every error will rollback the entire import. When using batch inserts, only the current batch will be rollbacked.