Cakephp Migrations: Utilizzare il “Migrations” in CakePHP per l’export ed import database

Il “Migrations” è un plugin, supportato dal core team di CakePHP che ci aiuta a fare le modifiche allo schema del database scrivendo file in PHP. La documentazione completa, per l’installazione e l’utilizzo del plugin, sono disponibili in lingua inglese sulla guida ufficiale CakePHP.

L’obiettivo di questo tutorial è quello di fornire  una soluzione semplificata, con i solo comandi necessari per esportare/importare la struttura e dei dati del database di ‘default‘, impostato in una specifica applicazione CakePHP.

Cakephp Migrations

Export del database esistente

Ipotizzando di disporre di un database con una sola tabella ‘Articles’, per esportare il database da console è possibile utilizzare il plugin Bake. Lanciando i seguenti comandi, saranno creati rispettivamente la struttura ed i dati del database, in questo caso della tabella Articles.

bin/cake bake migration_snapshot Initial

bin/cake bake seed --data Articles

Il comando relativo al ‘seed’ va eseguito per ogni tabella di cui si vogliono esportare anche i dati, mentre il ‘migration_snapshot’ senza parametri aggiuntivi esegue uno snapshot, appunto di tutto il database. I file generati saranno creati in /config/Migrations (i file di struttura) e in /config/Seeds (i file relativi ai dati delle singole tabelle).

Import del database creato

A questo punto è possibile utilizzare la console Migrations per importare lo schema ed i dati creati come Seeds.

bin/cake migrations migrate

bin/cake seed --seed Articles

Quanto sopra descritto è un modo rapido e testato per fare il dump di un database ed installarlo, utilizzando i soli comandi console. Questo approccio mi ha consentito di creare una Shell per l’AOBuilder mediante la quale fare la popolazione dei database in fase di installazione, semplificando i passaggi ed i comandi richiesti per avere l’ambiente configurato e funzionante.

Un esempio della Shell sviluppato nella versione 1.1.2 dei AOBuilder è di seguito riportata:

<?php

namespace Builder\Shell;

use Cake\Console\Shell;

/**
 * 
 */
class BuilderShell extends Shell {

    /**
     * 
     */
    public function main() {
        $this->out('Welcome to Builder Console v1.1.x');
        $this->hr();
    }

    /**
     * 
     * @param type $database
     */
    public function setup($database = 'default') {
        $this->out('Install Builder database: ' . $database);
        $this->hr();

        /**
         * Create database
         */
        $this->dispatchShell('migrations migrate -p Builder');

        /**
         * Insert data
         */
        $this->dispatchShell('migrations seed --seed UsersSeed --plugin Builder');
        $this->dispatchShell('migrations seed --seed RolesSeed --plugin Builder');
        $this->dispatchShell('migrations seed --seed TasksSeed --plugin Builder');
        $this->dispatchShell('migrations seed --seed UsersRolesSeed --plugin Builder');
        $this->dispatchShell('migrations seed --seed RolesTasksSeed --plugin Builder');
    }

}

Per approfondire l’argomento Shell consultare la sezione ‘Shell & Console’ sulla guida ufficiale ufficiale CakePHP.

 

Lascia un commento