CodeIgniter 4: migrazioni e seeder per gestire il database

Crea ed esegui migrazioni e seeder in CodeIgniter 4 con comandi Spark corretti, esempi PHP validi e precauzioni per i dati.

CodeIgniter 4: migrazioni e seeder per gestire il database

Crea ed esegui migrazioni e seeder in CodeIgniter 4 con comandi Spark corretti, esempi PHP validi e precauzioni per i dati.

Schema versionato

Le migrazioni descrivono modifiche incrementali allo schema. I file in app/Database/Migrations hanno un prefisso temporale e una classe univoca: up() applica la modifica, down() la annulla. La tabella migrations registra ciò che è già stato eseguito. Controlla la connessione e fai una copia dei dati prima di intervenire su un database esistente.

Generare una migrazione

Esegui php spark make:migration CreateNewsTable dalla directory del progetto. Il comando genera uno scheletro: completa up() e down() come nell’esempio seguente. Il metodo forge crea la tabella news con una chiave primaria e tre campi; in down() la tabella viene rimossa, quindi anche i suoi dati.

<?php
// app/Database/Migrations/YYYY-MM-DD-HHMMSS_CreateNewsTable.php
namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

class CreateNewsTable extends Migration
{
    public function up()
    {
        $this->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'],
        ]);
        $this->forge->addKey('id', true);
        $this->forge->createTable('news');
    }

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

Eseguire e controllare

php spark migrate applica le migrazioni mancanti nel namespace App. php spark migrate:status mostra lo stato. Per includere tutti i namespace previsti usa php spark migrate --all. Controlla il gruppo di database e il namespace scelto prima di lanciare i comandi. Non usare un inesistente migrate:latest come passaggio necessario.

Rollback e refresh

php spark migrate:rollback riporta le migrazioni allo stato iniziale; l’opzione -b seleziona un batch. php spark migrate:refresh esegue il rollback e poi tutte le migrazioni. Sono operazioni potenzialmente distruttive per i dati: usale solo su un database di prova o dopo una verifica con backup e piano di ripristino. Non sono un modo innocuo di aggiornare la produzione.

Seeder di esempio

Un seeder estende CodeIgniter\Database\Seeder e implementa run(). Genera la classe con php spark make:seeder NewsSeeder, poi inserisci dati fittizi come nell’esempio. php spark db:seed NewsSeeder lo esegue. Senza nome del seeder non dare per scontato che il comando esegua automaticamente tutti i file. L’esecuzione ripetuta dell’esempio inserirà duplicati se non introduci una regola di unicità o un controllo.

<?php
// app/Database/Seeds/NewsSeeder.php
namespace App\Database\Seeds;

use CodeIgniter\Database\Seeder;

class NewsSeeder extends Seeder
{
    public function run()
    {
        $this->db->table('news')->insertBatch([
            ['title' => 'Sample one', 'slug' => 'sample-one', 'text' => 'Demo text'],
            ['title' => 'Sample two', 'slug' => 'sample-two', 'text' => 'Demo text'],
        ]);
    }
}

Lavoro in team

Versiona migrazioni e seeder nel repository; crea una nuova migrazione anziché modificare una già applicata su altri ambienti. I dati statici di riferimento richiedono una strategia per aggiornamenti e ripetibilità; non mettere dati personali nei seeder. Prova applicazione e rollback su staging, verifica compatibilità delle query e applica in produzione solo le migrazioni pianificate.

Fonti

Documentazione CodeIgniter: https://codeigniter4.github.io/CodeIgniter4/dbmgmt/migration.html ; seeder: https://codeigniter4.github.io/CodeIgniter4/dbmgmt/seeds.html .

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