database/migrations/2022_04_21_203815_rehash_projects_roles.php
<?php

use Illuminate\Database\Migrations\Migration;

return new class extends Migration {
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up(): void
    {
        DB::table('tasks')
            ->lazyById()
            ->each(static function ($task) {
                DB::table('tasks_users')
                    ->join('users', 'tasks_users.user_id', '=', 'users.id')
                    ->where('tasks_users.task_id', '=', $task->id)
                    ->lazyById()
                    ->each(static function ($user) use ($task) {
                        if (DB::table('projects_users')
                                ->where('project_id', '=', $task->project_id)
                                ->where('user_id', '=', $user->id)
                                ->doesntExist()) {
                            DB::table('projects_users')->insert([
                                'user_id' => $user->id,
                                'project_id' => $task->project_id,
                                'role_id' => 2,
                            ]);
                        }
                    });
            });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down(): void
    {
        // No reverse... sorry
    }
};
