Migrações e Seeders

Migrações e Seeders

Os principais recursos para trabalhar com banco de dados

Introdução

Gerenciar o esquema do banco de dados de maneira controlada e repetível é uma necessidade crucial em qualquer aplicação. No Laravel, isso é facilitado por migrações e seeders.

As migrações permitem criar e modificar tabelas no banco de dados, enquanto os seeders são usados para popular tabelas com dados iniciais ou de teste.

Migrações

O Que São Migrações?

Migrações são como controle de versão para o banco de dados. Elas permitem que você modifique a estrutura do banco de dados de maneira incremental e segura.

Criando uma Migração

Você pode criar uma migração usando o Artisan CLI:

php artisan make:migration create_fruits_table

Isso criará um arquivo de migração em database/migrations. Um arquivo de migração típico tem dois métodos: up e down. O método up é usado para aplicar as alterações no banco de dados, enquanto o método down desfaz essas alterações.

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateFruitsTable extends Migration
{
    public function up()
    {
        Schema::create('fruits', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('color');    
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('fruits');
    }
}
Executando Migrações

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

sail artisan migrate

Para reverter a última migração, use:

sail artisan migrate:rollback
Modificando Tabelas Existentes

Você pode criar uma migração para modificar uma tabela existente:

sail artisan make:migration add_price_to_fruits_table --table=fruits

No método up, você define as alterações:

<?php
    public function up()
    {
        Schema::table('fruits', function (Blueprint $table) {
            $table->integer('price')->nullable();
        });
    }

    public function down()
    {
        Schema::table('fruits', function (Blueprint $table) {
            $table->dropColumn('price');
        });
    }

Seeders

O Que São Seeders?

Seeders são classes usadas para popular o banco de dados com dados iniciais ou de teste. Eles são úteis para preencher tabelas com dados que você pode usar durante o desenvolvimento ou para testar sua aplicação.

Criando um Seeder

Você pode criar um seeder usando o Artisan CLI:

sail artisan make:seeder FruitsTableSeeder

Isso criará um arquivo de seeder em database/seeders. Você pode definir os dados a serem inseridos no método run:

<?php
use Illuminate\Database\Seeder;
use App\Models\Fruit;

class FruitsTableSeeder extends Seeder
{
    public function run()
    {
        Fruit::create([
            'name' => 'Abacaxi',
            'color' => 'Amarelo',
        ]);

        Fruit::create([
            'name' => 'Banana',
            'color' => 'Amarela',
        ]);
    }
}
Executando Seeders

Para executar todos os seeders, use o comando:

sail artisan db:seed

Lembre-se de adicionar o seeder criado dentro do DatabaseSeeder.php

$this->call(FruitsTableSeeder::class);

Para executar um seeder específico, use:

sail artisan db:seed --class=FruitsTableSeeder

Models

Uma model no Laravel (e em muitos outros frameworks MVC - Model-View-Controller) é uma classe que representa uma entidade da aplicação, geralmente ligada a uma tabela específica no banco de dados. A model serve como a camada intermediária entre a aplicação e o banco de dados, facilitando o gerenciamento de dados.

sail artisan make:model Fruit
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Fruit extends Model
{
    use HasFactory;

    protected $fillable = [
        'name',
        'color',
        'price',
    ];
}

Factories e Seeders

Factories são frequentemente usadas em conjunto com seeders para gerar dados de teste realistas. Primeiro, você cria uma factory:

sail artisan make:factory FruitFactory --model=Fruit

No arquivo da factory, você define como os dados fictícios devem ser gerados:

<?php

namespace Database\Factories;

use App\Models\Fruit;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class FruitFactory extends Factory
{
    protected $model = Fruit::class;

    public function definition()
    {
        return [
            'name' => $this->faker->word,
            'color' => $this->faker->safeColorName,
            'price' => $this->faker->randomFloat(2, 1000, 5000),
        ];
    }
}

No seeder, você pode usar a factory para criar múltiplos registros:

<?php
use Illuminate\Database\Seeder;
use App\Models\Fruit;

class FruitsTableSeeder extends Seeder
{
    public function run()
    {
        Fruit::factory()->count(10)->create();
    }
}

Conclusão

Migrações e seeders são ferramentas poderosas no Laravel para gerenciar o esquema do banco de dados e popular tabelas de forma controlada e repetível. Elas permitem que você mantenha o banco de dados sincronizado e cheio de dados úteis durante o desenvolvimento e testes. Nos próximos tópicos, exploraremos outras funcionalidades avançadas do Laravel para continuar aprimorando suas habilidades no desenvolvimento de aplicações robustas e eficientes.

Did you find this article valuable?

Support Áreadev by becoming a sponsor. Any amount is appreciated!