5-Modelos y Migraciones

 Modelos y Migraciones en Laravel: Guía Completa

En Laravel, los modelos y las migraciones son esenciales para interactuar con la base de datos. A continuación, te explico cómo usarlos eficientemente, incluyendo comandos clave como rollbackrefresh y fresh.


1. Modelos en Laravel

Los modelos representan tablas en la base de datos y permiten interactuar con ellas usando Eloquent ORM.

Crear un Modelo

bash
Copy
Download
php artisan make:model Product -m

📌 Explicación:

  • -m crea automáticamente una migración asociada al modelo.

Estructura básica de un Modelo

php
Copy
Download
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $table = 'products'; // Nombre de la tabla (opcional si sigue convención)
    protected $fillable = ['name', 'price']; // Campos asignables masivamente
    protected $guarded = ['id']; // Campos protegidos (no asignables)
}

📌 Uso común:

  • $fillable: Permite asignación masiva (ej: Product::create($request->all())).

  • $guarded: Campos que no se pueden asignar masivamente.


2. Migraciones en Laravel

Las migraciones son como "control de versiones" para tu base de datos. Definen la estructura de las tablas.

Crear una Migración

bash
Copy
Download
php artisan make:migration create_products_table

📌 Ubicacióndatabase/migrations/XXXX_XX_XX_create_products_table.php

Estructura de una Migración

php
Copy
Download
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateProductsTable extends Migration
{
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id(); // Auto-incremental ID
            $table->string('name');
            $table->decimal('price', 8, 2);
            $table->timestamps(); // created_at y updated_at
        });
    }

    public function down()
    {
        Schema::dropIfExists('products'); // Elimina la tabla al hacer rollback
    }
}

📌 Tipos de columnas comunes:

  • string() → VARCHAR.

  • integer() → INT.

  • text() → TEXT.

  • boolean() → TINYINT(1).

  • timestamps() → Agrega created_at y updated_at.


3. Comandos Artisan para Migraciones

ComandoExplicación
php artisan migrateEjecuta migraciones pendientes.
php artisan migrate:rollbackDeshace la última migración.
php artisan migrate:rollback --step=3Deshace las últimas 3 migraciones.
php artisan migrate:refreshRollback + migrate (recrea tablas).
php artisan migrate:freshElimina todas las tablas y vuelve a migrar (sin rollback).
php artisan migrate:statusMuestra el estado de las migraciones.

📌 ¿Cuándo usar refresh vs fresh?

  • refresh: Útil si tienes seeders y quieres reinsertar datos.

  • fresh: Más rápido, pero borra todo sin ejecutar down().


4. Relaciones entre Modelos

Laravel permite definir relaciones fácilmente:

Ejemplo: Un Producto pertenece a una Categoría

php
Copy
Download
// En el modelo Product
public function category()
{
    return $this->belongsTo(Category::class);
}

// En el modelo Category
public function products()
{
    return $this->hasMany(Product::class);
}

📌 Tipos de relaciones comunes:

  • hasOne() → Uno a uno.

  • hasMany() → Uno a muchos.

  • belongsTo() → Inversa de hasMany.

  • belongsToMany() → Muchos a muchos (con tabla pivote).


5. Seeders (Datos de Prueba)

Genera datos falsos para testing:

Crear un Seeder

bash
Copy
Download
php artisan make:seeder ProductSeeder

Ejemplo de Seeder

php
Copy
Download
use App\Models\Product;
use Illuminate\Database\Seeder;

class ProductSeeder extends Seeder
{
    public function run()
    {
        Product::factory()->count(50)->create(); // Usando Factory
        // O manualmente:
        Product::create(['name' => 'Laptop', 'price' => 999.99]);
    }
}

📌 Ejecutar Seeders:

bash
Copy
Download
php artisan db:seed --class=ProductSeeder
# O para ejecutar todos:
php artisan db:seed

Conclusión

  • Modelos: Gestionan datos y relaciones con Eloquent.

  • Migraciones: Controlan la estructura de la base de datos.

  • Comandos clavemigraterollbackrefreshfresh.

  • Seeders: Poblar la base de datos con datos de prueba.

Comentarios

Entradas más populares de este blog

8-Creación de una API RESTful con Laravel

02 -Rutas en Laravel

3-Rutas