id(); $table->string('nome', 50)->unique(); $table->string('descrizione', 255)->nullable(); $table->integer('ordine')->default(0); $table->boolean('attiva')->default(true); $table->timestamps(); }); } $defaultRuoli = [ ['nome' => 'Membro', 'descrizione' => 'Membro del gruppo'], ['nome' => 'Catechista', 'descrizione' => 'Catechista del gruppo'], ['nome' => 'Animatore', 'descrizione' => 'Animatore del gruppo'], ['nome' => 'Responsabile', 'descrizione' => 'Responsabile del gruppo'], ['nome' => 'Vice Responsabile', 'descrizione' => 'Vice responsabile del gruppo'], ['nome' => 'Segretario', 'descrizione' => 'Segretario del gruppo'], ['nome' => 'Tesoriere', 'descrizione' => 'Tesoriere del gruppo'], ]; foreach ($defaultRuoli as $i => $ruolo) { DB::table('ruoli')->insert([ 'nome' => $ruolo['nome'], 'descrizione' => $ruolo['descrizione'], 'ordine' => $i, 'attiva' => true, 'created_at' => now(), 'updated_at' => now(), ]); } if (!Schema::hasColumn('gruppo_individuo', 'ruolo_id')) { Schema::table('gruppo_individuo', function (Blueprint $table) { $table->unsignedBigInteger('ruolo_id')->nullable()->after('ruolo_nel_gruppo'); $table->foreign('ruolo_id')->references('id')->on('ruoli')->onDelete('set null'); $table->index('ruolo_id'); }); $ruoliMap = DB::table('ruoli')->pluck('id', 'nome')->toArray(); $pivotRecords = DB::table('gruppo_individuo') ->whereNotNull('ruolo_nel_gruppo') ->where('ruolo_nel_gruppo', '!=', '') ->distinct() ->pluck('ruolo_nel_gruppo'); foreach ($pivotRecords as $ruoloNome) { if (isset($ruoliMap[$ruoloNome])) { DB::table('gruppo_individuo') ->where('ruolo_nel_gruppo', $ruoloNome) ->update(['ruolo_id' => $ruoliMap[$ruoloNome]]); } } } } public function down(): void { Schema::table('gruppo_individuo', function (Blueprint $table) { $table->dropForeign(['ruolo_id']); $table->dropColumn('ruolo_id'); }); Schema::dropIfExists('ruoli'); } };