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 rollback, refresh 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
php artisan make:model Product -m📌 Explicación:
-mcrea automáticamente una migración asociada al modelo.
Estructura básica de un Modelo
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
php artisan make:migration create_products_table📌 Ubicación: database/migrations/XXXX_XX_XX_create_products_table.php
Estructura de una Migración
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()→ Agregacreated_atyupdated_at.
3. Comandos Artisan para Migraciones
| Comando | Explicación |
|---|---|
php artisan migrate | Ejecuta migraciones pendientes. |
php artisan migrate:rollback | Deshace la última migración. |
php artisan migrate:rollback --step=3 | Deshace las últimas 3 migraciones. |
php artisan migrate:refresh | Rollback + migrate (recrea tablas). |
php artisan migrate:fresh | Elimina todas las tablas y vuelve a migrar (sin rollback). |
php artisan migrate:status | Muestra 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 ejecutardown().
4. Relaciones entre Modelos
Laravel permite definir relaciones fácilmente:
Ejemplo: Un Producto pertenece a una Categoría
// 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 dehasMany.belongsToMany()→ Muchos a muchos (con tabla pivote).
5. Seeders (Datos de Prueba)
Genera datos falsos para testing:
Crear un Seeder
php artisan make:seeder ProductSeederEjemplo de Seeder
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:
php artisan db:seed --class=ProductSeeder
# O para ejecutar todos:
php artisan db:seedConclusión
Modelos: Gestionan datos y relaciones con Eloquent.
Migraciones: Controlan la estructura de la base de datos.
Comandos clave:
migrate,rollback,refresh,fresh.Seeders: Poblar la base de datos con datos de prueba.
Comentarios
Publicar un comentario