Skip to content

Migración, Fábrica y Sembradora

Migración

Empezaremos creando la estructura de la tabla tasks. Ubique el archivo que generamos, al final del paso anterior y complételo con el código resaltado.

📃./database/migrations/###_##_##_######_create_tasks_table.php

php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->id();
            $table->string('title', 50);
            $table->text('description');
            $table->boolean('done')->default(false);
            $table->softDeletes();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('tasks');       
    }
};

Fábrica

Aprovechemos las fábricas de Laravel para rellenar la sembradora. Complételo con el código resaltado.

📃./database/factories/TaskFactory.php

php
<?php

namespace Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Task>
 */
class TaskFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        return [
            'title' => fake()->unique()->text(25),
            'description' => fake()->text(50),
            'done' => fake()->boolean(),
        ];        
    }
}

Sembradora

Notifiquemos que queremos sembrar las tareas. Agregue el código resaltado.

📃./database/seeders/DatabaseSeeder.php

php
<?php

namespace Database\Seeders;

// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        // \App\Models\User::factory(10)->create();

        // \App\Models\User::factory()->create([
        //     'name' => 'Test User',
        //     'email' => 'test@example.com',
        // ]);
        
        $this->call([
            TaskSeeder::class,
        ]);
    }
}

Ahora actualizaremos nuestro archivo sembrador para que cree 3 registros.

📃./database/seeders/TaskSeeder.php

php
<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class TaskSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        \App\Models\Task::factory(3)->create();
    }
}

Ejecutar las migraciones

Ha llegado el momento de ejecutar las migraciones por la terminal.

sh
php artisan migrate:fresh --seed

Ya creamos una tabla llamada tasks con algunos registro de prueba.