You can write transaction-aware code

Using DB::afterCommit method you can write code that will only be executed if the transaction gets committed and discarded if the transaction is rolled back.

If there is no transaction, the code will be executed right away.

DB::transaction(function () {
$user = User::create([...]);
 
$user->teams()->create([...]);
});
class User extends Model
{
protected static function booted()
{
static::created(function ($user) {
// Will send the email only if the
// transaction is committed
DB::afterCommit(function () use ($user) {
Mail::send(new WelcomeEmail($user));
});
});
}
}

Tip given by @cosmeescobedo

Recent New Courses