15.1 - Migrate
Não se preocupe com falhas, preocupe-se com as chances que você perde quando não tenta. (Jack Canfield)
Aqui segue um exemplo de migração:
<?php
use Migrations\AbstractMigration;
class CreateProducts extends AbstractMigration
{
/**
* Change Method.
*
* More information on this method is available here:
* http://docs.phinx.org/en/latest/migrations.html#the-change-method
* @return void
*/
public function change()
{
$table = $this->table('products');
$table->addColumn('name', 'string', [
'default' => null,
'limit' => 255,
'null' => false,
]);
$table->addColumn('description', 'text', [
'default' => null,
'null' => false,
]);
$table->addColumn('created', 'datetime', [
'default' => null,
'null' => false,
]);
$table->addColumn('modified', 'datetime', [
'default' => null,
'null' => false,
]);
$table->create();
}
}
Salvar em
config/Migrations/20190519085224_Products.php
Veja o formato: YYYYMMDDHHMMSS_Products.php
Também podemos criar a migration usando o bake:
bin/cake bake migration CreateProducts name:string description:text created modified
Você pode criar um arquivo de migração vazio caso deseje ter um controle total do que precisa ser executado. Para isto, apenas omita a definição das colunas:
bin/cake migrations create MyCustomMigration
Criar a tabela ou as tabelas do(s) Migration(s)
bin/cake migrations migrate
Limpar todo o banco, excluindo todas as tabelas
bin/cake migrations rollback
Nomes de campos e tipos
fieldName:fieldType[length]:indexType:indexName
Por exemplo, veja formas válidas de especificar um campo de e-mail:
• email:string:unique
• email:string:unique:EMAIL_INDEX
• email:string[120]:unique:EMAIL_INDEX
O parâmetro length para o fieldType é opcional e deve sempre ser escrito entre colchetes
Os campos created e modified serão automaticamente definidos como datetime.
Os tipos de campos são genericamente disponibilizados pela biblioteca Phinx. Eles podem ser:
• string
• text
• integer
• biginteger
• float
• decimal
• datetime
• timestamp
• time
• date
• binary
• boolean
• uuid
Há algumas heurísticas para a escolha de tipos de campos que não são especificados ou são definidos com valor inválido. O tipo de campo padrão é string;
• id: integer
• created, modified, updated: datetime
Adicionando colunas a uma tabela existente
Se o nome da migração na linha de comando estiver na forma "AddXXXToYYY" e for seguido por uma lista de nomes de colunas e tipos, então o arquivo de migração com o código para criar as colunas será gerado:
bin/cake bake migration AddPriceToProducts price:decimal
A linha de comando acima irá gerar um arquivo com o seguinte conteúdo:
<?php
use Migrations\AbstractMigration;
class AddPriceToProducts extends AbstractMigration
{
public function change()
{
$table = $this->table('products');
$table->addColumn('price', 'decimal')
->update();
}
}
Especificando o tamanho do campo
Se você precisar especificar o tamanho do campo, você pode fazer isto entre colchetes logo após o tipo do campo, ex.:
bin/cake bake migration AddFullDescriptionToProducts full_description:string[60]
Executar o comando acima irá gerar:
<?php
use Migrations\AbstractMigration;
class AddFullDescriptionToProducts extends AbstractMigration
{
public function change()
{
$table = $this->table('products');
$table->addColumn('full_description', 'string', [
'default' => null,
'limit' => 60,
'null' => false,
])
->update();
}
}
Se o tamanho não for especificado, os seguintes padrões serão utilizados:
• string: 255
• integer: 11
• biginteger: 20
Removendo uma coluna de uma tabela
Da mesma forma, você pode gerar uma migração para remover uma coluna utilizando a linha de comando, se o nome da migração estiver na forma "RemoveXXXFromYYY":
bin/cake bake migration RemovePriceFromProducts price
Cria o arquivo:
<?php
use Migrations\AbstractMigration;
class RemovePriceFromProducts extends AbstractMigration
{
public function change()
{
$table = $this->table('products');
$table->removeColumn('price');
}
}
Gerando migrações a partir de uma base de dados existente
Se você está trabalhando com um banco de dados pré-existente e quer começar a usar migrações, ou para versionar o schema inicial da base de dados da sua aplicação, você pode executar o comando migration_snapshot:
bin/cake bake migration_snapshot Financas
Ele gerará um arquivo de migrations com todas as tabelas do banco, mas somente as estruturas, sem os registros:
YYYYMMDDHHMMSS_Financas.php
Migrações também podem ser executadas para plugins. Simplesmente utilize a opção
``--plugin`` ou ``-p``
bin/cake migrations migrate -p MyAwesomePlugin
Lista das migrações
bin/cake migrations status
Comentários (0)
Comments fornecido por CComment