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:


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:


// 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:


$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:


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

Evaldo Junior

Desenvolvedor web, palestrante, escritor e usuário e contribuidor do Software Livre.

comments powered by Disqus