diff --git a/tests/Concerns/ToModelTest.php b/tests/Concerns/ToModelTest.php index e2f40fcfc..8487d9ee7 100644 --- a/tests/Concerns/ToModelTest.php +++ b/tests/Concerns/ToModelTest.php @@ -10,6 +10,7 @@ use Maatwebsite\Excel\Concerns\PersistRelations; use Maatwebsite\Excel\Concerns\ToModel; use Maatwebsite\Excel\Tests\Data\Stubs\Database\Group; +use Maatwebsite\Excel\Tests\Data\Stubs\Database\GroupedUser; use Maatwebsite\Excel\Tests\Data\Stubs\Database\User; use Maatwebsite\Excel\Tests\TestCase; @@ -260,4 +261,47 @@ public function model(array $row) $this->assertEquals(2, Group::count()); DB::connection()->disableQueryLog(); } + + public function test_can_import_models_with_non_nullable_belongs_to_many_relations() + { + Group::query()->truncate(); + GroupedUser::query()->truncate(); + + DB::connection()->enableQueryLog(); + + $import = new class implements ToModel, PersistRelations + { + use Importable; + + /** + * @param array $row + * @return GroupedUser + */ + public function model(array $row): GroupedUser + { + $groupedUser = new GroupedUser([ + 'name' => $row[0], + 'email' => $row[1], + 'password' => 'secret', + ]); + + $groupedUser->setRelation('group', new Group(['name' => $row[0]])); + + return $groupedUser; + } + }; + + $import->import('import-users.xlsx'); + + $this->assertCount(6, DB::getQueryLog()); + + $users = GroupedUser::all(); + $users->each(function (GroupedUser $groupedUser) { + $this->assertInstanceOf(Group::class, $groupedUser->group); + }); + + $this->assertCount(2, $users); + $this->assertEquals(2, Group::count()); + DB::connection()->disableQueryLog(); + } } diff --git a/tests/Data/Stubs/Database/GroupedUser.php b/tests/Data/Stubs/Database/GroupedUser.php new file mode 100644 index 000000000..c991bfb19 --- /dev/null +++ b/tests/Data/Stubs/Database/GroupedUser.php @@ -0,0 +1,20 @@ +belongsTo(Group::class); + } +} diff --git a/tests/Data/Stubs/Database/Migrations/0000_00_00_000003_create_grouped_users_table.php b/tests/Data/Stubs/Database/Migrations/0000_00_00_000003_create_grouped_users_table.php new file mode 100644 index 000000000..26ef5e6cb --- /dev/null +++ b/tests/Data/Stubs/Database/Migrations/0000_00_00_000003_create_grouped_users_table.php @@ -0,0 +1,32 @@ +increments('id'); + $table->string('name'); + $table->string('email'); + $table->string('password'); + $table->unsignedInteger('group_id')->index(); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down() + { + Schema::dropIfExists('grouped_users'); + } +}