Don't you speak portuguese? Translate this site with Google Translator

Pensamento do Dia

Não somos felizes quando todos gostam de nós e nos ajudam, mas sim quando gostamos dos outros e os ajudamos. (Autor desconhecido)

15.1 - Migrate

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

Comments fornecido por CComment

Novo Testamento

Mas Pedro o levantou, dizendo: Levanta-te, que eu também sou homem.
(At, 10:26)

Rotas no Mapa do Google

© 2015 Ribamar FS. All Rights Reserved. Designed By JoomShaper