Migrações

Migrações são como controle de versão para o seu banco de dados. Elas permitem que sua equipe defina e compartilhe a estrutura do banco de dados da aplicação. Se você já precisou pedir a um colega para adicionar manualmente uma coluna ao seu banco de dados local depois de atualizar suas alterações do controle de versão, você já enfrentou o problema que as migrações de banco de dados resolvem.

Gerando Migrações

Você pode usar o comando Line make:migration para gerar uma migração de banco de dados. A nova migração será colocada no diretório src/database/migrations do seu projeto. Cada nome de arquivo de migração contém um timestamp que permite ao Lithe determinar a ordem das migrações.

php line make:migration NomeDaMigracao --template=NomeDoTemplate

Onde:

  • NomeDaMigracao: Nome da migração a ser criada.
  • --template=NomeDoTemplate: Opcional. Define o template a ser usado para gerar a migração. Caso não especificado, será usado o template definido na variável de ambiente DB_CONNECTION_METHOD.

Templates de Migração

Os templates de migração determinam como os arquivos de migração são gerados, adaptados para diferentes ORMs ou abordagens de banco de dados. O Lithe suporta os seguintes templates:

  • eloquent: Template para migrações utilizando o ORM Eloquent.
  • mysqli: Template para migrações utilizando o MySQLi.
  • default: Template padrão para migrações customizadas ou genéricas.

Para implementar migrações no Lithe usando diferentes templates como Eloquent ou MySQLi, é importante entender como cada um deles funciona e como criar os arquivos de migração correspondentes.

Migração de Banco de Dados

O Lithe suporta diversas formas de migração para gerenciar bancos de dados de forma eficiente e simplificada. Aqui está um exemplo de como criar uma migração para a tabela users, independentemente de qual ORM ou método de conexão esteja sendo utilizado:

1

Criando a Migração

Execute o seguinte comando para criar uma migração:

php line make:migration CreateUsersTable

Isso criará um arquivo de migração dentro do diretório src/database/migrations/. Por exemplo, YYYY_MM_DD_HHMMSS_CreateUsersTable.php.

2

Exemplo de Arquivo de Migração

return new class
{
  /**
   * Run the migrations.
   *
   * @param mysqli $db
   * @return void
   */
  public function up(mysqli $db): void
  {
      $query = "
          CREATE TABLE IF NOT EXISTS users (
              id INT(11) AUTO_INCREMENT PRIMARY KEY,
              name VARCHAR(255) NOT NULL,
              email VARCHAR(255) UNIQUE NOT NULL,
              created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
              updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
          )
      ";

      $db->query($query);
  }

  /**
   * Reverse the migrations.
   *
   * @param mysqli $db
   * @return void
   */
  public function down(mysqli $db): void
  {
      $query = "DROP TABLE IF EXISTS users";
      $db->query($query);
  }
};

Executando Migrações

Após criar os arquivos de migração conforme os exemplos acima, é necessário executá-los para aplicar as alterações no banco de dados.

Para executar todas as suas migrações pendentes, utilize o comando:

php line migrate

Revertendo Migrações

Para reverter a última operação de migração, você pode usar o comando rollback do Line. Este comando reverte a última 'batch' de migrações, que pode incluir vários arquivos de migração.

php line migrate:rollback

Você pode reverter uma "batch" específica de migrações fornecendo a opção batch para o comando rollback, onde a opção batch corresponde a um valor de "batch" dentro da tabela de migrações do seu aplicativo. Por exemplo, o seguinte comando irá reverter todas as migrações na "batch" três:

php line migrate:rollback --batch=3

Isso irá reverter todas as migrações que foram agrupadas na terceira "batch".

Ao usar o comando migrate:reset todas as migrações do seu aplicativo serão revertidas:

php line migrate:reset
Reverter e Migrar Usando um Único Comando

O comando migrate:refresh reverterá todas as suas migrações e, em seguida, executará o comando migrate. Este comando recria efetivamente todo o seu banco de dados:

php line migrate:refresh

Gerenciar migrações de banco de dados é fundamental para manter a integridade e evolução das estruturas de dados ao longo do ciclo de vida de uma aplicação. Utilizando as migrações no Lithe, você ganha controle total sobre essas alterações, facilitando o desenvolvimento e a manutenção do seu projeto.