InFog

Um blog sobre GNU, Linux, Open Source, Desenvolvimento e Nerdices em Geral

Migrations no CodeIgniter

Tags: , ,

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

Quero Comentar!

Eventos: Conisli 2011 e PHP Conference 2011

Tags: , , , ,

Olá, pessoal!

Nas últimas semanas fui a dois eventos bem interessantes: Conisli 2011 e PHP Conference 2011. Vou comentar um pouco sobre a minha experiência em cada um deles e mostrar umas fotos!

Conisli 2011

O Conisli, Congresso Internacional de Software Livre, foi um evento interessante. Ele foi realizado na Fatec de Osasco (um belo espaço, alias). Eu fiz uma palestra sobre o CodeIgniter e como Turbinar suas linhas de código com ele.

No evento pude ver algumas palestras bem interessantes. Uma delas foi a já famosa palestra do Kretcheu sobre como dar uma boa palestra.

Mas a palestra que me pegou totalmente de surpresa foi a do Bruce Momjian, sim ele mesmo, um dos criadores do PostgreSQL! É claro que depois da palestra eu fui lá bater um papo com ele. Aí já aproveitei para registrar o momento. O @Saganium estava lá também:

Uma pena que o evento teve pouquíssimo público. Quer dizer, o próprio Momjian palestrou para umas 10 pessoas apenas! Mas foi um evento legal, deu para conhecer umas coisas interessantes sobre o Drupal, Geoprocessamento e outros.

PHP Conference 2011

Este é um evento que eu ainda não conhecia de perto, mas já tinha ouvido falar. Gostei bastante do conteúdo das palestras, teve muita coisa técnica bem bacana para os mais avançados. O problema desses eventos de linguagens é que as vezes colocam muitas palestras do tipo “Venha para o PHP você também”. Mas a ideia é que “se eu estou em um evento de PHP, eu já estou convencido a usar PHP”.

Sobre as palestras, teve muita coisa legal. Senti que muita gente está de olho no Symfony e depois de ler um pouco sobre este framework, eu entendi o motivo. Ele trás para o PHP um paradigma bem diferente com relação aos outros frameworks mais “tradicionais” e talvez seja essa novidade que esteja encantando a todos. Não vou entrar em detalhes técnicos e dizer qual é o melhor framework, mas se você já é experiente em outros ambientes, eu sugiro que dê uma olhada no Symfony. Como desenvolvedor CodeIgniter, eu comecei a trazer algumas ideias do mundo Symfony =D E vamos aprendendo uns com os outros para que todos evoluam!

Ops, o texto era sobre a PHP Conference 2011! Então, voltando ao assunto, o evento foi bem legal e consegui ver algumas palestras muito boas, o tema era sempre algo como PHP e MVC, Frameworks, Banco de Dados. Mas por outro lado uma coisa me chamou a atenção, na primeira palestra que vi, de um palestrante italiano, foi feita a pergunta: Quem aqui usa um framework? E acho que nem 10% da galera levantou a mão! Controle de versão então? A galera passa longe, no máximo um SVN e olhe lá… A Comunidade PHP é muito grande e forte, agora precisa também ser mais evoluída no uso de tecnologias mais novas e que realmente ajudam muito no processo de desenvolver softwares.

Mas de qualquer forma o evento foi muito bom e em 2012 estarei lá novamente! Quem sabe até como palestrante hehe.

InFog

Quero Comentar!

Conisli 2011: PHP Turbinado com CodeIgniter

Tags: , , ,

Olá, pessoal!

Nos dias 04 e 05 de novembro acontecerá o Conisli – Congresso Internacional de Software Livre.

O evento já existe desde 2003 e neste ano terá diversas trilhas de palestras relacionadas à tecnologia e ao Software Livre.

O Conisli será realizado na Fatec de Osasco, que fica na rua Pedro Rissato, 30, Vila dos Remédios. O horário do evento é das 10h00 às 14h00, no dia 04 (sexta) e das 10h00 às 17h00, no dia 05 (sábado).

Eu também estarei lá e irei palestrar sobre o uso do CodeIgniter para desenvolvimento de aplicações em PHP. Minha palestra será no dia 05, sábado, às 14h00.

Ah, a entrada é gratuita!

Visite o site do evento e saiba mais.

Espero vocês lá!

InFog

1 Comentário

© 2009 InFog. All Rights Reserved.

This blog is powered by Wordpress and Magatheme by Bryan Helmig.