GERADOR para classe CDbMigration

19 views
Skip to first unread message

Marcos Ronaldo

unread,
Dec 18, 2012, 11:35:49 PM12/18/12
to yii-framew...@googlegroups.com
Olá pessoal,


Estive cursando ruby on rails e fiquei estasiado com a incrível facilidade de criar aplicações robustas e a que me chamou mais atenção foi a facilidade em modelar tabelas via shell usando o db:migrate.

Observei que o Yii também está implantando a classe um migrate, mas, ainda com inúmeras limitações.

E como o fundamento do framework é a agilidade no desenvolvimento, coloquei a mão na massa e comecei um codigo muito simples que chamei de mygrate (trocadilho com migrate).

Este código é um gerador (ainda incompleto) que pretende gerar os arquivos de classes com um diferencial, ele cria também o conteúdo para o arquivo.

Por exemplo: para criar uma tabela digitamos, php create nome_da_tabela campox campoy campoz campo_com_tipo=float, e o sistema gera o código completo para o posterior ação da classe CDbMigration.

Vamos a um exemplo prático, criar uma tabela de agenda.

O comando é: php create tb_agenda nome sobrenome tel_fixo tel_movel email facebook twitter niver=date

Observe que todos os campos não são seguidos do tipo, apenas o campo niver possui o tipo date, o restante será string, mas não preciso declarar isso.

O codigo gerado será:

<?php

class m121219_121258_tb_agenda extends CDbMigration
{
        public function up()
        {
            $this->createTable('tb_agenda', array(
                'id' => 'pk',
                'nome' = 'string',
                'sobrenome' = 'string',
                'tel_fixo' = 'string',
                'tel_movel' = 'string',
                'email' = 'string',
                'facebook' = 'string',
                'twitter' = 'string',
                'niver' = 'date',
                'date_created' = 'timestamp',
                'date_altered' = 'timestamp',
            ));
        }

        public function down()
        {
                $this->dropTable('tb_agenda');
                 echo "m121219_121258_tb_agenda does not support migration down.";
                 return false;

        }

        /*
        // Use safeUp/safeDown to do migration with transaction
        public function safeUp()
        {
        }

        public function safeDown()
        {
        }
        */
}

Observe que ele acrescentou o campo id e determinou que o tipo é PK (primary key), acrescentou também os campos date_created e date_altered.

Mas, imagine que depois que você gerou um arquivo para sua tabela, já migrou, ta desenvolvendo seu código e se deu conta que precisa acrescentar mais 2 campos. .. Não tem problema. É só dar um comando add.

php mygrate add tb_agenda tipo_saguineo tel_da_mae

Apenas troque o parâmetro create por add e o sistema gerará um novo arquivo com o seguinte código:

<?php

class m121219_011209_tb_agenda extends CDbMigration
{
        public function up()
        {
                $this->addColumn('tb_agenda','tipo_saguineo', 'string');
                $this->addColumn('tb_agenda','tel_da_mae', 'string');

        }

        public function down()
        {
                $this->dropColumn('tb_agenda','tipo_saguineo');
                $this->dropColumn('tb_agenda','tel_da_mae');

        }

        /*
        // Use safeUp/safeDown to do migration with transaction
        public function safeUp()
        {
        }

        public function safeDown()
        {
        }
        */
}


Pronto! É só migrar.

Agora, ainda faltam alguns comandos a serem implementados. 
* alter (alterar colunas),
* del (deletar colunas).

Quem se habilita a ajudar nesses comandos que faltam?

A intenção é que os comentários sejam em inglês para ficar universal.

Eu sei que tem muita coisa em português e o que está inglês não está correto.

Outra coisa que é muito importante, quando criar o método up, não esqueça de criar também o método down que é onde a classe CDbMigration desfaz as alterações que foram aplicadas anteriormente.


Aguardo resposta de quem queira ajudar.

Abraços!




Paulo Porto

unread,
Dec 19, 2012, 12:10:59 AM12/19/12
to yii-framew...@googlegroups.com
Legal, Marcos.

Sua inciativa é bacana. No framework Laravel existe o mesmo recurso do migrations, inclusive fizeram uma comparação entre os dois frameworks e suas formas de utilização, que você pode encontrar no link http://www.codecrumbs.at/blog/2012/09/4-laravel-vs-yii-part-2-schemamigrations.

Mas calma aí! Isso foi só um parêntese, não quero de maneira alguma entrar no mérito de qual é o melhor, apenas estou mostrando para que você possa estudar o código Laravel Generator, que faz coisas semelhantes ao que você propõe em disponibilizar no Yii, que é gerar o código dos migrations automaticamente, etc.

Segue o link do projeto https://github.com/JeffreyWay/Laravel-Generator. De repente, um recurso ou outro que tiver nele, possa servir de inspiração para o seu projeto.

Até mais!





--
--
YFB - Yii Framework Brasil
Participe nas discussões e convide outros programadores ao grupo. http://groups.google.com.br/group/yii-framework-brasil?hl=pt-BR
 
04/2011: Anexos de até 250kb foram autorizados pelos membros da lista. Use com moderação.
 
--
Postar: yii-framew...@googlegroups.com
Sair da lista: yii-framework-br...@googlegroups.com
 
 

Davi Alexandre

unread,
Dec 19, 2012, 8:30:58 AM12/19/12
to yii-framew...@googlegroups.com
Bem legal, cara!

Algum motivo pra ser um script php simples e não utilizar os CLI Commands do Yii?

2012/12/19 Marcos Ronaldo <marcos....@gmail.com>

Marcos Ronaldo

unread,
Dec 19, 2012, 8:50:18 AM12/19/12
to yii-framew...@googlegroups.com

O unico motivo foi a pressa por causa de uma demanda aqui na empresa. Nao tive tempo pra estudar o os CLI Commands

Marcos Ronaldo

unread,
Dec 19, 2012, 8:50:39 AM12/19/12
to yii-framew...@googlegroups.com

Paulo, obrihado pela dica. Vou dar uma olhada.

Reply all
Reply to author
Forward
0 new messages