Codeigniter Migration: Versioning Database

07 Nov 2019 | M.A.D.R.

Per “migration” s'intende le gestione delle varie versioni di un database. Grazie al concetto di migration possiamo effettuare tutte le operazioni sul database che abitualmente effetuiamo con strumenti come phpMyAdminToadMySQL Workbench e simili.

La cosa interessante è che invece di utilizzare uno di questi strumenti per creare una tabella oppure aggiornare un campo, basterà scrivere la nostra migration sotto forma di classe PHP ed eseguirla.

Codeigniter, come altri framework più blasonati, mette a disposizione una Libreria, appunto Migration, che consente allo sviluppatore di mutuare e alterare nel tempo la struttura del database con semplici passaggi.

La prima cosa da capire è la separazione logica delle nostre tabelle, in modo tale da attuare correzioni e implementazioni corrette.

Migrations Class, ossia la Libreria di Codeigniter per effettuare le migration, è tanto semplice quanto complessa, vediamo subito alcuni passaggi per approcciare questo strumento.

  • Nome della Migration
  • Creazione Migration
  • Configurazione delle Migrations

Partendo dall'ultimo punto, "Configurazione delle Migrations" possiamo istruire Codeigniter ad utilizzare la nostra logica, quindi magari è possibile alterare la memorizzazione dei file semplicemente utilizzando una sequenza numerica invece del timestamp.

Creazione di una Migration

Strutturata la nostra applicazione, dovremo creare i nostri file all'interno della directory configurata in migration.php ($config['migration_path']), che solitamente è application/migrations/, rinominare il file sequenzialmente e/o con timestamp in base alla configurazione.

  • Creazione file con timestamp: 20191107000000_test_migration.php
  • Creazione file sequenziale: 001_test_migration.php

Vediamo a questo punto come strutturare il nostro file:

defined('BASEPATH') OR exit('No direct script access allowed');
class Migration_test extends CI_Migration {
        public function up()
        {
                $this->dbforge->add_field(array(
                        'id' => array(
                                'type' => 'INT',
                                'unsigned' => FALSE,
                                'auto_increment' => TRUE
                        ),
                        'name' => array(
                                'type' => 'VARCHAR',
                                'constraint' => '100',
                        ),
                        'description' => array(
                                'type' => 'TEXT',
                                'null' => TRUE,
                        ),
                ));
                $this->dbforge->add_key('id', TRUE);
                $this->dbforge->create_table('test');
        }
        public function down()
        {
                $this->dbforge->drop_table('test');
        }
}

Vediamo che all'interno della migration abbiamo 2 metodi, uno UP e l'altro down, che rispettivamente indicano a codeigniter l'azione in caso di migration successiva o precedente.

Infatti se la current version di migration è la 0, e creiamo una nuova migration 001 , eseguendo il codice, codeigniter lancerà il metodo up del nostro file 001_test_migration.php, al contrario utilizzerà il metodo down per tornare ad una versione precedente.

Conclusioni e riflessioni

L’utilizzo di un sistema di migration porta con se molti vantaggi e sopratutto una nuova tecnica per la gestione dei database.

Prima del concetto di migration, la gestione del database era separata dal nostro framework. L’aggiunta di un campo in una tabella era una procedura totalmente manuale, utilizzando ad esempio phpMyAdmin.

Questo comportava spesso errori e soprattutto perdita di tempo. Pensate di dover aggiungere lo stesso campo in una tabella su 20 Ecommerce diversi già in produzione. Operazione lunga e rischiosa.

L'utilizzo di uno strato software per automatizzare questo tipo di operazione, sarà tutto più semplice, sicuro e manutenibile.

Non dovremo collegarci 20 volte su phpMyAdmin per aggiungere il nuovo campo, ma basterà generare la nostra migration, testarla ed eseguirla. Magicamente tutti i nostri database saranno aggiornati alle ultime migration eseguite

Codeigniter VS Laravel: chi vince la sfida?

07 Nov 2019 | M.A.D.R.

Oggi l'evoluzione dei linguaggi sono sempre più orientate verso la semplificazione del codice, l’ottimizzazione delle funzionalità e la velocità di esecuzione. Codeigniter il nonno di tutti i framework, riesce ancora a tener testa al gio...

Codeigniter Migration: Versioning Database

07 Nov 2019 | M.A.D.R.

Per “migration” s'intende le gestione delle varie versioni di un database. Grazie al concetto di migration possiamo effettuare tutte le operazioni sul database che abitualmente effetuiamo con strumenti come phpMyAdmin, Toad, MySQL...

Codeigniter CLI: Eseguiamo lavori da linea di comando.

07 Nov 2019 | M.A.D.R.

Come tutti sapranno un framework che si rispetti mette a disposizione la CLI (command line interface), la quale permette di richiamare comandi più o meno complessi. A cosa servono? Per semplicità soffermiamoci solo ad alcuni principali utili...

Codeigniter: Estendiamo il framework con gli HOOKS

07 Nov 2019 | M.A.D.R.

Spesso i dev hanno necessità di modificare il comportamento ed il flusso dell'applicazione, codeigniter mette a disposizione gli HOOKS. Lavorare con un framework, anche se molto semplice, spesso induce ad errori comuni e poco sicuri, basti pensa...

Codeigniter: Profilazione dell'applicazione

07 Nov 2019 | M.A.D.R.

Seguendo l'articolo del Banchmark, per completare le operazioni di performance del nostro codice, Codeigniter permette la creazione di una profilazione dettagliata dell'esecuzione del nostro codice. La classe Profiler visualizzerà i risultati de...

CodeIgniter: Analizziamo le performance del nostro codice

07 Nov 2019 | M.A.D.R.

Ogni programmatore ad un certo punto dello sviluppo del codice, ha necessità di analizzare le performance della propria applicazione/funzione/metodo, infatti CodeIgniter ha una classe di gestione Benchmark sempre attiva, che consente di calcolare ...

Codeigniter: Template Engine o Template Parser

07 Nov 2019 | M.A.D.R.

Salve a tutti, dopo aver commentato la funzione dei controller e dei model non resta che parlare delle view, o come meglio definiti Template Engine o Template Parser. Codeigniter non ha un vero e proprio Template Engine, ma sfrutta una classe nat...

Codeigniter: Interazione con i database

07 Nov 2019 | M.A.D.R.

Continuiamo questa piccola avventura: CodeIgniter può interagire con i database attraverso un model (ma non è obbligatorio) o attraverso un controller (altamente sconsigliato). Cosa significa interagire con un database? Possiamo recuperare ...

CodeIgniter: Flussi di funzionamento "Router"

07 Nov 2019 | M.A.D.R.

Quello che uno sviluppatore, abituato a interagire con i files php, deve capire la centralità del file index.php, ossia il cuore di un progetto Framework, ed in questo caso Codeigniter router. Non esistono altre pagine all’infuori di index.ph...

Installazione CodeIgniter: prime impressioni

07 Nov 2019 | M.A.D.R.

Abbiamo già citato nell'articolo precedente alcune caratteristiche di questo Framework CodeIgniter. Piccola premessa obbligata... Oggi passeremo al setaccio la procedura d'installazione dello stesso e cercheremo di orientarci nella struttura ...

CodeIgniter - Un framework di tutto rispetto

07 Nov 2019 | M.A.D.R.

Arriva un momento, nel percorso lavorativo di un programmatore Php, nel quale si avverte la mancanza di un framework che possa semplificare la gestione di flussi più o meno complessi. I così detti framework contengono metodi e funzioni in rispo...

Soluzioni complete per ogni esigenza