Skip to content

Latest commit

 

History

History
executable file
·
183 lines (143 loc) · 5.42 KB

11.2Migrations.md

File metadata and controls

executable file
·
183 lines (143 loc) · 5.42 KB

Migrations com Phinx

Uma ferramenta que ajuda você a fazer mudanças no schema do banco de dados utilizando arquivos PHP, que podem ser versionados utilizando um sistema de controle de versão.

Ele permite que você atualize suas tabelas ao longo do tempo. Ao invés de escrever modificações de schema via SQL, este plugin permite que você utilize um conjunto intuitivo de métodos em PHP para fazer mudanças no seu banco de dados.

Uma migração é basicamente um arquivo PHP que descreve as mudanças a serem feitas no banco de dados. Um arquivo de migração pode criar ou excluir tabelas, adicionar ou remover colunas, criar índices e até mesmo inserir dados em seu banco de dados.

Muito útil para quando desejamos distribuir um plugin ou aplicativo, já incluindo os arquivos de migration e/ou seed quando o usuário apenas executa o comando para criar as tabelas e adicionar os registros. E também para permitir que o banco de dados possa ser versionado.

Drivers MySQL: mysql PostgreSQL: pgsql SQLite: sqlite SQL Server: sqlsrv

Instalação composer require robmorgan/phinx

Após instalar criar no raiz do aplicativo os diretórios

mkdir db mkdir db/migrations mkdir db/seeds

Criar o arquivo de configuração executando o comando no raiz do aplicativo: php vendor/bin/phinx init

Editar e ajustar o banco de dados em (lembrar o ambiente configurado): phinx.yml

Para criar migration execute: vendor/robmorgan/phinx/bin/phinx create Customers

Então edite o arquivo criado: db/migrations/20190821114033_customers.php O formato: YYYYMMDDHHMMSS_customers.php

Alterar o método change() para que fique assim (exemplo):

public function change() { $this->table('customers') ->addColumn('name', 'string', ['limit' => 50]) ->addColumn('email', 'string', ['limit' => 50]) ->addColumn('birthday', 'date', ['null' => true]) ->addColumn('created', 'datetime',['default'=>'CURRENT_TIMESTAMP']) ->create(); }

Exemplo para products public function change() { $this->table('products') ->addColumn('description', 'string', ['limit' => 50]) ->addColumn('unity', 'string', ['limit' => 5]) ->addColumn('date', 'date', ['null' => true]) ->addColumn('created', 'datetime',['default'=>'CURRENT_TIMESTAMP']) ->create();
}

Executar o comando para criar a tabela: php vendor/robmorgan/phinx/bin/phinx migrate -e production

Criar arquivo de Seed (popular tabela com registros): php vendor/bin/phinx seed:create Customers

Gerará então o arquivo: db/seeds/Customers.php

Editar o arquivo gerado e mudar que fique assim:

Para inserir os registros na tabela com seed execute: php vendor/bin/phinx seed:run -e production

Podemos usar a biblioteca faker para inserir muitos registros com mais praticidade

Instalar executando: composer require fzaninotto/faker

Testando. Edite o arquivo gerado db/seeds/Customers.php

E altere assim:

class Customers extends AbstractSeed { public function run() { $faker = Faker\Factory::create(); $data = []; for ($i = 0; $i < 50; $i++) { $data[] = [ 'name' => $faker->userName, 'email' => $faker->email, 'birthday' => $faker->date('Y-m-d'), 'created' => date('Y-m-d H:i:s'), ]; }

    $this->insert('customers', $data);
}

}

Exemplo de products public function run() { $faker = Faker\Factory::create(); $data = []; for ($i = 0; $i < 50; $i++) { $data[] = [ 'description' => $faker->name, 'unity' => $faker->regexify('[A-Z]3'), 'date' => $faker->date('Y-m-d'), 'created' => date('Y-m-d H:i:s'), ]; }

    $this->insert('products', $data);

// ou /* $posts = $this->table('customers'); $posts->insert($data) ->save(); */

Exemplo para users

$faker->userName, 'password' => sha1($faker->password), 'email' => $faker->email, 'active' => $faker->regexify('[01]'), 'created' => date('Y-m-d H:i:s'), ]; } $this->insert('users', $data); } } Para inserir os registros na tabela com seed execute: php vendor/bin/phinx seed:run -e production Tipos de campos válidos na migration Column types are specified as strings and can be one of: • biginteger • binary • boolean • date • datetime • decimal • float • integer • string • text • time • timestamp • uuid In addition, the MySQL adapter supports enum, set, blob and json column types. (json in MySQL 5.7 and above) In addition, the Postgres adapter supports smallint, json, jsonb, uuid, cidr, inet and macaddr column types (PostgreSQL 9.3 and above). For valid options, see the ref:Valid Column Options below. https://book.cakephp.org/3.0/en/phinx/migrations.html#valid-column-options Referências http://docs.phinx.org/en/latest/ https://book.cakephp.org/3.0/en/phinx.html https://coderwall.com/p/v3qg2q/complex-database-migrations-with-php-mysql-using-phinx