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!