Inicio > Cursos > PHP > Laravel: Framework PHP Moderno
PHPPHP Enterprise y LaravelLección 15 de 15

Laravel: Framework PHP Moderno

Laravel es el framework PHP más popular del mundo. Ofrece routing expresivo, Eloquent ORM (modelos ActiveRecord que mapean tablas), Blade (motor de plantillas), migraciones de base de datos, autenticación integrada, colas de trabajo, y Service Container (inyección de dependencias automática). composer create-project laravel/laravel mi-app crea un proyecto completo listo para producción.

Eloquent ORM es el corazón de Laravel para datos. Cada tabla tiene un Modelo: class Producto extends Model {}. Eloquent genera el SQL automáticamente: Producto::where("precio", "<", 100)->orderBy("nombre")->get() ejecuta SELECT * FROM productos WHERE precio < 100 ORDER BY nombre. Las relaciones se definen con métodos: hasMany, belongsTo, belongsToMany. Las migraciones versionan la estructura de la DB en PHP, permitiendo migrar y revertir cambios con artisan.

<?php
// --- Routing (routes/web.php) ---
Route::get("/productos", [ProductoController::class, "index"]);
Route::post("/productos", [ProductoController::class, "store"]);
Route::get("/productos/{id}", [ProductoController::class, "show"]);

// --- Modelo Eloquent (app/Models/Producto.php) ---
class Producto extends Model {
    protected $fillable = ["nombre", "precio", "categoria_id"];

    // Relación: un producto pertenece a una categoría
    public function categoria() {
        return $this->belongsTo(Categoria::class);
    }
}

class Categoria extends Model {
    public function productos() {
        return $this->hasMany(Producto::class);
    }
}

// --- Controller (app/Http/Controllers/ProductoController.php) ---
class ProductoController extends Controller {
    public function index(Request $request) {
        $productos = Producto::with("categoria") // Eager loading
            ->when($request->buscar, fn($q, $s) =>
                $q->where("nombre", "like", "%{$s}%")
            )
            ->orderBy("created_at", "desc")
            ->paginate(20);

        return view("productos.index", compact("productos"));
    }

    public function store(Request $request) {
        $validated = $request->validate([
            "nombre" => "required|string|max:255",
            "precio" => "required|numeric|min:0",
            "categoria_id" => "required|exists:categorias,id",
        ]);

        Producto::create($validated);
        return redirect("/productos")->with("exito", "Producto creado");
    }
}

// --- Migración (database/migrations/..._create_productos.php) ---
// php artisan make:migration create_productos_table
return new class extends Migration {
    public function up(): void {
        Schema::create("productos", function (Blueprint $table) {
            $table->id();
            $table->string("nombre");
            $table->decimal("precio", 10, 2);
            $table->foreignId("categoria_id")->constrained();
            $table->timestamps(); // created_at, updated_at
        });
    }
};
// php artisan migrate — aplica la migración
Consejo⚡ Comandos esenciales: php artisan make:model Producto -mcr (crea modelo + migración + controller + resource). php artisan migrate para aplicar migraciones.
← Patrón MVC desde Cero

Practica esta lección

Resuelve los ejercicios del curso de PHP en la app, gratis y con corrección automática.

Empezar a practicar