5. Atualizar o ficheiro das migrações

Neste capítulo, iremos atualizar o ficheiro das migrações para adicionar novos campos à tabela produtos. Esta atualização permitirá a adição de novas funcionalidades e a otimização da nossa base de dados. Iremos também explorar alguns conceitos fundamentais das migrações no Laravel e como podemos utilizá-las para gerir as alterações das tabelas na base de dados.

Objetivos

  • Compreender o funcionamento das migrações no Laravel
  • Atualizar o ficheiro de migração existente
  • Adicionar novos campos à tabela produtos
  • Testar as alterações

Atualização do Ficheiro de Migração

Para iniciar, vamos navegar até ao diretório database\migrations. Aqui, encontramos o nosso ficheiro de migração da tabela produtos. O seu conteúdo deve ser semelhante ao seguinte:

Schema::create('produtos', function (Blueprint $table) {
    $table->id(); // Cria uma chave primária do tipo bigint com auto-incremento.
    $table->string('code')->unique(); // Coluna 'code', uma string única, usada para identificar o produto.
    $table->string('name'); // Nome do produto.
    $table->integer('quantity'); // Quantidade do produto em stock.
    $table->decimal('price', 8, 2); // Preço do produto com até 8 dígitos no total e 2 casas decimais.
    $table->text('description')->nullable(); // Descrição opcional do produto.
    $table->timestamps(); // Cria duas colunas: 'created_at' e 'updated_at'.
});

Alterar a estrutura da tabela

Como adicionar dois novos campos: category e supplier_id.

Para adicionar novos campos à tabela produtos, podemos atualizar diretamente o ficheiro de migração, se ainda não tivermos executado as migrações. Caso contrário, teremos que criar uma nova migração para atualizar a tabela existente.

Atualização do Ficheiro de Migração Inicial

Se ainda não executou as migrações, pode simplesmente adicionar os novos campos no ficheiro de migração existente.

Schema::create('produtos', function (Blueprint $table) {
    $table->id();
    $table->string('code')->unique();
    $table->string('name');
    $table->integer('quantity');
    $table->decimal('price', 8, 2);
    $table->text('description')->nullable();
    $table->string('category');
    $table->unsignedBigInteger('supplier_id');
    $table->timestamps();

    $table->foreign('supplier_id')->references('id')->on('suppliers');
});

Criação de uma Nova Migração

Se já tiver executado as migrações anteriores, deve criar uma nova migração para atualizar a tabela produtos. Para criar uma nova migração, execute o seguinte comando:

php artisan make:migration add_category_and_supplier_id_to_products_table --table=produtos

Este comando cria um novo ficheiro de migração. Abra o ficheiro recém-criado e adicione o seguinte código:

public function up()
{
    Schema::table('produtos', function (Blueprint $table) {
        $table->string('category')->after('description');
        $table->unsignedBigInteger('supplier_id')->after('category');
        $table->foreign('supplier_id')->references('id')->on('suppliers');
    });
}

public function down()
{
    Schema::table('produtos', function (Blueprint $table) {
        $table->dropColumn('category');
        $table->dropForeign(['supplier_id']);
        $table->dropColumn('supplier_id');
    });
}

Resumo

Neste capítulo, aprendemos a como atualizar o ficheiro das migrações no Laravel, adicionando dois novos campos à tabela produtos. Esta prática é essencial para a manutenção e evolução das bases de dados de qualquer aplicação web.

<< 4. Criar o modelo Produto Índice 6. Migrar tabelas >>