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