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 ambienteDB_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:
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
.
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.