Migrations no CodeIgniter

Olá, pessoal! Hoje vou falar sobre o sistema de Migrations do CodeIgniter, uma excelente forma de manter seu banco de dados sempre atualizado entre as suas máquinas de desenvolvimento ou sua equipe.

Imagine o seguinte cenário: Você tem uma aplicação sendo desenvolvida. Você não está desenvolvendo sozinho, mas sim com uma equipe de umas 2 ou mais pessoas. Aí você percebe a necessidade de adicionar um campo em uma tabela no banco. Você vai lá e adiciona o campo. Depois o software começa a presentar problemas para os outros desenvolvedores pois o banco de dados de desenvolvimento deles não tem o novo campo, ou a nova tabela…

É aí que entram as Migrations do CodeIgniter. A ideia é simples:

Partindo de um banco inicial, documenta-se as suas alterações na forma de código PHP. E à estas mudanças nós temos que dar números de versão. Depois basta acompanhar as Migrations e seu banco não mais ficará desatualizado! Perfeito!

Vamos a um exemplo.

Modelo Inicial

Para o modelo inicial, temos a seguinte tabela:

1
2
3
4
5
6
CREATE TABLE `visitantes` (
  `id`      INTEGER       NOT NULL AUTO_INCREMENT,
  `nome`    VARCHAR(40)   NOT NULL,
  `email`   VARCHAR(100)  NOT NULL,
  PRIMARY KEY (`id`)
)

Legal. E assim o sistema foi desenvolvido. Aí um belo dia alguém percebe a necessidade de também se cadastrar a data e hora da vista do cliente.

Você poderia simplesmente adicionar o campo na tabela, mas aí cairia nos problemas que expliquei acima. Então vamos fazer uma Migration!

Arquivos de Migrations

Os arquivos das Migrations devem ficar em application/migrations/. Este diretório não existe por padrão, então você pode criá-lo.

Criado o diretório, é só adicionar a primeiro Migration. Os nomes dos arquivos das Migrations segue um padrão de numeração e nome. Neste caso eu nomeei o arquivo assim:

001_datahora_visitantes.php

001 significa que esta é a primeira Migration. Já o nome eu coloquei para ficar bem claro o que ele faz (Adiciona o campo datahora na tabela visitantes).

Dentro do arquivo deve existir uma classe com o nome Migration_ substituindo o 001 do nome do arquivo. Veja o exemplo abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

// Perceba os maiúsculos em Migration e na primeira letra do restante
class Migration_Datahora_visitantes extends CI_Migration {

    public function up() {
        // Verificando se o campo já existe
        if (! $this->db->field_exists('datahora', 'visitantes')) {
            // Criando o campo.
            $this->load->dbforge(); // DB Forge, para manipular o banco

            $campos = array(
                'datahora' => array(
                    'type'      => 'datetime',
                    'default'   => '2012-01-01 00:00:00'
                )
            );

            $this->dbforge->add_column('visitantes', $campos);
        }
    }
}

Certo, hora de executar.

Executando

Para executar você precisa ativar as Migrations na configuração do CodeIgniter. Para isso altere o arquivoapplication/config/migration.php:

1
2
3
<?php
$config['migration_enabled'] = TRUE;  // Ativar aqui
$config['migration_version'] = 1;     // Colocar o número da versão aqui

E também é necessário criar um Controller para ativar tudo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
class Migrate extends CI_Controller {

    /**
     * Método construtor
     */

    public function  __construct() {
        parent::__construct();
    }

    public function index() {
        $this->load->library('migration');

        if ($this->migration->current()) {
            echo "Migração bem sucedida!";
        }
        else {
            echo $this->migration->error_string();
        }
    }
}

Beleza, agora é só acessar o seu controller e voilã! Ele deve exibir o “Migração bem sucedida!”. Se não exibir, leia os erros e tente corrigir qualquer problema.

Veja como ficou a minha tabela depois do Migration:

SELECT * FROM visitantes;

=======

+----+---------------+-----------------+---------------------+
| id | nome          | email           | datahora            |
+----+---------------+-----------------+---------------------+
|  1 | Evaldo Junior | email@email.com | 2012-01-01 00:00:00 |
+----+---------------+-----------------+---------------------+

Legal né? Agora vai lá e faça seus teste bote em pratica =D

Ah, e se você quiser aprender mais sobre CodeIgniter e como tirar o melhor dele, eu tenho um curso online, o Turbine-se com CodeIgniter. As inscrições estão abertas, então corre lá para garantir a sua vaga!

InFog

Outros textos que você pode gostar:

  1. Lançado o CodeIgniter 2.1.3 Lançada a versão 2.1.3 do CodeIgniter. Continue lendo →...
  2. Nova Turma do Turbine-se com CodeIgniter! Olá! Estão abertas as inscrições para a próxima turma do...
  3. CodeIgniter 2.0.0 Olá, pessoal! No dia 28 de janeiro de 2011 foi...

Related posts brought to you by Yet Another Related Posts Plugin.

Esta entrada foi publicada em Blog, CodeIgniter, Desenvolvimento, PHP e marcada com a tag , , . Adicione o link permanente aos seus favoritos.

Uma resposta a Migrations no CodeIgniter

  1. Hugo disse:

    Opa, parabéns pelo artigo.
    Queria saber o seguinte, como eu adiciono um um campo padrão, ao executar o migration ele já inserir um valor por exemplo:

    1 | Evaldo Junior | email@email.com | 2012-01-01 00:00:00

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>