Migrations no Yii Framework 2 - Parte 2

Cálcio Heavy Metal
PHPRio
Published in
4 min readMar 24, 2017

--

Nesse artigo iremos construir as outras tabelas do sistema. O artigo anterior vimos uma introdução breve sobre as migrations.

Por quê usar as Migrations?

Pode não ter ficado claro para muitos, mas as migrations são muito importantes, porque é uma excelente forma de sempre manter seu banco de dados atualizado entre sua máquina, sua equipe e principalmente o ambiente de produção.

Imagine a situação onde você está desenvolvendo uma aplicação junto com um amigo remotamente, cada um na sua casa. Seu amigo precisou modificar alguma coisa no banco. Você já baixou as modificações do seu repositório e roda a aplicação e estoura um erro na tela. Sem a migration você teria que pedir o dump do banco de dados, já com a migration, assim que surgisse o erro, bastaria rodar a migration que o sistema voltaria a rodar tranquilamente.

Continuando a criação das tabelas

Irei mostrar agora as várias maneiras que podemos criar as tabelas pela migrations.

Desde a versão 2.0.7 o console de criação de migration provê um jeito mais conveniente para a criação das migrations. Basta rodar o comando php yii migrate/create create_xxx_table por exemplo, que ele já cria a migration com o código do up() e down() criados e também um campo id como chave primária. Outra conveniência é que pode utilizar o mesmo comando e adicionar o parâmetro abaixo.

-- fields=”campo1:tipo,campo2:tipo”

Dessa forma, ele já gera a migration com os campos declarados em “fields”. Caso queira que a chave primária seja um campo diferente de id bastar usar a seguinte maneira

-- fields=”nome_do_campo:primaryKey”

Tabela about

Execute o comando no terminal dentro do projeto vitrine.

php yii migrate/create create_about_table --fields=”content:tinyText:notNull,created_at:integer:notNull,updated_at:integer:notNull”

Se abrir o arquivo xxx_create_about_table dentro do diretório migrations verá a migration já pronta.

Código gerado pelo comando yii migrate

Tabela categories

php yii migrate/create create_categories_table --fields=”name:string(80):notNull:unique,status:boolean:notNull,created_at:integer:notNull,updated_at:integer:notNull”
Código gerado pelo comando yii migrate

Tabela products

Desde a versão 2.0.8 também é possível adicionar diretamente as chaves estrangeiras.

php yii migrate/create create_products_table --fields=”category_id:integer:notNull:foreignKey,name:string(100):notNull,cover:string(150),price:decimal(10,2),highligt:boolean:notNull,status:boolean:notNull,created_at:integer:notNull,updated_at:integer:notNull”
Código gerado pelo comando yii migrate

Tabela product_images

Nesse exemplo só iremos criar a estrutura básica da tabela com sua chave primária. Os campos criaremos diretamente no arquivo gerado pela migration.

php yii migrate/create create_product_images_table
Nesse exemplo o conteúdo foi gerado manualmente dentro do arquivo da migration

Executando as migrations criadas

Agora que toda nossa estrutura está criada, chegou a parte de executar as migrations. Ainda no terminal, basta digitar o comando php yii migrate e voilà. Será exibido no terminal tudo que foi executado. Se houver algum erro será exibido também e poderá corrigir a migration que deu erro e rodar o comando novamente.

Ao executar o comando php yii migrate ele exibe todas as migrations pendentes e pede a confirmação ou não da criação
Após digitar ‘yes’ o Yii executa as migrations por ordem cronológica (data e hora de criação) e no final exibe tudo que foi executado, inclusive erros se houver.

Uma dica valiosa é. As vezes mesmo quando da erro em alguma migration ele cria o registro na tabela migration (onde fica o histórico de todas as migrations executadas), se isso acontece, basta apagar o registro e executar a migration novamente.

Algumas considerações e dicas

Conforme pode ser visto da documentação do Yii2 existem outras maneiras de criar suas migrations. Observe também as nomenclaturas dos campos que são chaves primárias e chaves estrangeiras.

Não que seja obrigatório, mas é recomendado que as chaves primárias tenham só o nome “id” e as chaves estrangeiras seja no padrão nome_da_tabela_no_singular_id, como no exemplo da tabela products que tem como chave estrangeira category_id e a tabela product_images que tem como chave estrangeira product_id.

O motivo disso é que o Yii 2 cria automaticamente em seus models (modelos) as relations (ralações entre as tabelas) e com esse padrão adotado os nomes dessas relations ficam mais simples de entender.

Por exemplo no model Product (que ainda iremos gerar) a relação entre Product e Category terá o nome getCategory(). Como podemos perceber fica um nome claro, direto e objetivo. Por outro lado, se criar sua chave estrangeira com o padrão que o MySQL cria, quando utiliza aquele editor visual do PHP MyAdmin, que cria as relações no formato intensities_idintensity por exemplo, sua relation terá o nome getIntensitiesIdintensity(). Repare que esse último nome já não é tão agradável aos olhos. E na hora de utilizá-los em suas consultas e chamadas nas views não fica uma coisa natural.

Um padrão que eu costumo adotar é que as tabelas sempre são no plural, uma vez que é uma coleção de dados, já os models (modelos) eu crio no singular. Na hora que formos gerar os models pelo Yii 2 veremos isso.

Exemplos diversos do uso das migrations

Vou mostrar agora outros usos das migrations que vão te ajudar e muito no dia a dia, como por exemplo, adicionar um campo novo em uma tabela já existente, remover um campo, mudar o nome de um campo. Consulte a documentação para ver todas as opções possíveis.

ATENÇÃO: Os exemplos abaixo NÃO são para ser executados no nosso projeto. Eles são meramente para exemplificação.

Adicionar um campo novo:

php yii migrate/create add_highlight_to_product_images --fields=” highlight:boolean”

Remover um campo novo:

php yii migrate/create drop_highlight_to_product_images --fields=” highlight”

Renomear uma coluna:

php yii migrate/create renameColum_highlight_to_cover_to_product_images

Espero que tenham gostado desse artigo e que a partir de agora, pode criar toda suas estruturas de tabelas, alterações de nomes de campos, tipo de dados e outras coisas a mais pelas migrations.

Para acompanhar o projeto Vitrine clique aqui.

Se gostou do conteúdo, da aquele like caprichado para ajudar o artigo e o autor.

--

--