CodeIgniter 4: migrazioni e seeder – gestire il database come un pro

Guida pratica a migrazioni e seeder in CodeIgniter 4: creare tabelle, versionare lo schema e popolare il database con dati di esempio.

CodeIgniter 4: migrazioni e seeder – gestire il database come un pro

Le migrazioni e i seeder sono strumenti essenziali per gestire il database in modo professionale con CodeIgniter 4. Le migrazioni permettono di versionare lo schema del database, mentre i seeder popolano le tabelle con dati di esempio o di riferimento.

In questa guida vedremo come creare ed eseguire migrazioni, come generare seeder e come gestire il ciclo di vita del database in diversi ambienti.

Cosa sono le migrazioni

Le migrazioni sono file PHP che descrivono le modifiche allo schema del database in modo incrementale e versionato. In CodeIgniter 4 risiedono nella cartella app/Database/Migrations.

Ogni migrazione contiene due metodi: up() per applicare la modifica e down() per annullarla.

Creare una migrazione

Per generare una nuova migrazione, usa il comando spark:

php spark make:migration CreateNewsTable

Il comando crea un file con timestamp nella cartella app/Database/Migrations. La struttura base è:

forge->addField([
            'id' => [
                'type'           => 'INT',
                'constraint'     => 11,
                'unsigned'       => true,
                'auto_increment' => true,
            ],
            'title' => [
                'type'       => 'VARCHAR',
                'constraint' => 255,
            ],
            'slug' => [
                'type'       => 'VARCHAR',
                'constraint' => 255,
            ],
            'text' => [
                'type' => 'TEXT',
            ],
            'created_at' => [
                'type' => 'DATETIME',
                'null' => true,
            ],
        ]);
        $this->forge->addKey('id', true);
        $this->forge->createTable('news');
    }

    public function down()
    {
        $this->forge->dropTable('news');
    }
}

Eseguire le migrazioni

Per applicare tutte le migrazioni in sospeso:

php spark migrate

Per tornare all'ultima versione disponibile:

php spark migrate:latest

Per annullare tutte le migrazioni:

php spark migrate:rollback

Per rieseguire tutte le migrazioni da zero (utile in sviluppo):

php spark migrate:refresh

Il comando migrate:refresh esegue il rollback di tutte le migrazioni e le riesegue, riportando il database allo stato pulito.

Cosa sono i seeder

I seeder sono classi che popolano le tabelle con dati di esempio o di riferimento. Risiedono nella cartella app/Database/Seeds.

Creare un seeder

php spark make:seed NewsSeeder

Il file generato avrà questa struttura:

 'Prima notizia',
                'slug'  => 'prima-notizia',
                'text'  => 'Contenuto della prima notizia...',
            ],
            [
                'title' => 'Seconda notizia',
                'slug'  => 'seconda-notizia',
                'text'  => 'Contenuto della seconda notizia...',
            ],
        ];

        $this->db->table('news')->insertBatch($data);
    }
}

Eseguire i seeder

php spark db:seed NewsSeeder

Per eseguire tutti i seeder registrati:

php spark db:seed

Strumenti utili: DB-Craft

Se hai un database esistente e vuoi generare automaticamente migrazioni e seeder, puoi usare il pacchetto DB-Craft:

composer require robinncode/db_craft

I comandi principali sono:

php spark get:migration table_name
php spark get:seed table_name

DB-Craft genera file di migrazione e seeder partendo dallo schema e dai dati del database connesso, risparmiando molto tempo in fase di migrazione da progetti esistenti.

Migrazioni in team: buone pratiche

  • Ogni migrazione deve fare una sola cosa e avere un nome descrittivo.
  • Non modificare mai una migrazione già applicata in produzione: creane una nuova.
  • Usa migrate:refresh solo in sviluppo, mai in produzione.
  • Versiona i file di migrazione e seeder nel repository Git.
  • In produzione esegui solo php spark migrate, mai refresh o rollback senza backup.

Raccomandazioni

  • Definisci sempre il metodo down() per poter annullare la migrazione.
  • Usa nomi descrittivi per le migrazioni (es. CreateNewsTable, AddStatusToNews).
  • Non inserire dati reali nei seeder: usa dati fittizi o di riferimento.
  • Testa sempre le migrazioni su un database di staging prima della produzione.

Fonti ufficiali

Share

What's Your Reaction?

Like Like 0
Cancella like Cancella like 0
Amore Amore 0
Buffo Buffo 0
arrabbiato arrabbiato 0
Sad Sad 0
Wow Wow 0