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
O 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