requiredMapping() ->exampleHeader('Name') ->example('RAW00001') ->label('Name') ->rules(['required']),//, 'max:255' ImportColumn::make('email') ->requiredMapping() ->exampleHeader('E-mail') ->example('RAW00001@cripumps.com') ->label('E-mail') ->rules(['required', 'email']),//, 'max:255' ImportColumn::make('password') ->requiredMapping() ->exampleHeader('Password') ->example('RAW00001') ->label('Password') ->rules(['required']),//, 'max:255' ImportColumn::make('roles') ->requiredMapping() ->exampleHeader('Roles') ->example('Employee') ->label('Roles') ->rules(['nullable', 'string']), // Optional roles ]; } public function resolveRecord(): ?User { $warnMsg = []; if (Str::length($this->data['name']) < 1) { $warnMsg[] = "User name not found!"; } // || !is_numeric($this->data['code']) || !preg_match('/^[1-9]\d{3,}$/', $this->data['code']) if (Str::length($this->data['email']) < 5) { $warnMsg[] = "Invalid email found!"; } if (Str::length($this->data['password']) < 3) { $warnMsg[] = "Invalid password found!"; } // Validate roles if provided $roles = []; if (!empty($this->data['roles'])) { $roles = collect(explode(',', $this->data['roles'])) ->map(fn($role) => trim($role)) ->filter() ->toArray(); foreach ($roles as $roleName) { if (!Role::where('name', $roleName)->exists()) { $warnMsg[] = "Role : '{$roleName}' does not exist!"; } } } else { $warnMsg[] = "User roles not found!"; } if (!empty($warnMsg)) { throw new RowImportFailedException(implode(', ', $warnMsg)); } $user = User::updateOrCreate([ 'email' => $this->data['email'], ], [ 'name' => $this->data['name'], 'password' => $this->data['password'], ]); // Assign roles if (!empty($roles)) { $user->syncRoles($roles); } return null; // return User::firstOrNew([ // // Update existing records, matching them by `$this->data['column_name']` // 'email' => $this->data['email'], // ]); //return new User(); } public static function getCompletedNotificationBody(Import $import): string { $body = 'Your user import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.'; if ($failedRowsCount = $import->getFailedRowsCount()) { $body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.'; } return $body; } }