Importing (and creating) data for more than one table

I'm trying to import data, but in the end I want to insert into more than one table.

Problem details:
  • I have a users table.
  • I have a teachers table.
  • The import should add users to the users table but it should also create teachers (for new users) for each user
Unless I understand the docs incorrectly, the ->relationship() helper won't work because I don't have existing teachers to match to users.

My idea was to create teachers (and link them to a user) within the ->afterCreate() or ->afterSave() lifecycle hooks but this does not seem to work.
In fact the hooks doesn't seem to fire at all.

Currently I have:
public static function getColumns(): array
    {
        return [
            ImportColumn::make('first_name')
                ->label('First Name')
                ->requiredMapping()
                ->rules(['required', 'string'])
                ->examples(['John', 'Jane'])
                ->exampleHeader('First Name'),

            ImportColumn::make('last_name')
                ->label('Last Name')
                ->requiredMapping()
                ->rules(['required', 'string'])
                ->examples(['Doe', 'Mathews'])
                ->exampleHeader('Last Name'),

            ImportColumn::make('email')
                ->label('Email Address')
                ->requiredMapping()
                ->rules(['required', 'email'])
                ->examples(['john@gmail.com', 'mathews@yahoo.com'])
                ->exampleHeader('Email Address'),
        ];
    }


public function resolveRecord(): ?User
    {
        return User::firstOrNew(['email' => $this->data['email']]);
    }


  protected function afterSave(): void
    {
        if (!$this->record->teacher) {
            Teacher::create(['user_id' => $this->record->id]);
        }
    }


Is there a better approach here? I'm I missing something?
Any help would be appreciated.
Was this page helpful?