laravel-eloquent-orm-en-laravel

Eloquent ORM en Laravel

  • 3 min

Eloquent es el ORM de Laravel que relaciona modelos PHP con registros de una base de datos.

En el Módulo 7 aprendiste a escribir SELECT * FROM usuarios WHERE id = 1 y a usar PDO. Estaba bien para aprender, pero escribir SQL a mano es lento, propenso a errores y cansado.

Eloquent es el ORM (Object-Relational Mapper) de Laravel. Permite consultar y modificar registros mediante modelos PHP.

La lógica: modelo = tabla

La regla es sencillísima: Cada tabla de tu base de datos tiene un “Modelo” (Clase) asociado.

  • Si tienes la tabla productos (plural), tendrás el modelo Producto (singular).
  • Si tienes la tabla users (plural), tendrás el modelo User (singular).

Para crear un modelo, usamos a nuestro amigo Artisan:

php artisan make:model Producto
Copied!

Esto crea app/Models/Producto.php. Eloquent aplica convenciones para relacionar Producto con la tabla productos y expone los atributos recuperados como propiedades dinámicas. No inspecciona la tabla para declarar propiedades PHP; los casts, la asignación masiva y otras reglas se configuran en el modelo.

Olvídate del SQL: el CRUD con Eloquent

Vamos a ver cómo se hacen las 4 operaciones básicas. Fíjate en que no hay ni una sola línea de código SQL. Todo es PHP puro y orientado a objetos.

Supongamos que estamos dentro de un Controlador:

A. Leer (Read)

use App\Models\Producto;

// 1. Obtener TODOS los productos (SELECT * FROM productos)
$todos = Producto::all();

foreach ($todos as $item) {
    echo $item->nombre; // Accedemos a la columna 'nombre' como si fuera una propiedad
}

// 2. Buscar por ID (SELECT * FROM productos WHERE id = 5)
$producto = Producto::find(5); // Devuelve null si no existe

// 3. Consultas complejas (SELECT * FROM productos WHERE precio > 100 AND activo = 1)
// Fíjate lo legible que es ("get" ejecuta la consulta)
$caros = Producto::where('precio', '>', 100)
                 ->where('activo', true)
                 ->get();
Copied!

B. Crear (Create)

Olvídate de INSERT INTO.... Simplemente crea un objeto nuevo, rellena sus datos y guárdalo.

$nuevo = new Producto();

// Asignamos valores a las columnas
$nuevo->nombre = "Monitor 4K";
$nuevo->precio = 299.99;
$nuevo->descripcion = "Pantalla de alta resolución";

// Guardamos en BD. Eloquent hace el INSERT y protege contra inyección SQL automáticamente.
$nuevo->save(); 
Copied!

C. Actualizar (Update)

Primero buscas el registro que quieres editar, cambias el valor y vuelves a guardar.

// 1. Buscamos el producto 5 o lanzamos una excepción 404
$producto = Producto::findOrFail(5);

// 2. Cambiamos solo lo que queremos
$producto->precio = 150.00;

// 3. Guardamos los cambios (Laravel hace el UPDATE automático)
$producto->save();
Copied!

D. Borrar (Delete)

$producto = Producto::findOrFail(5);
$producto->delete(); // Adiós registro
Copied!

La verdadera potencia: relaciones

Lo más difícil en SQL puro son los JOIN (unir tablas). “Traeme los pedidos del usuario que compró X…”. Eloquent hace que las relaciones se lean como inglés simple.

Si configuras bien tus modelos (diciendo “Un Usuario tiene muchos Pedidos”), puedes hacer esto:

$usuario = User::find(1);

// Laravel consulta la relación 'pedidos' al acceder a la propiedad
// y te devuelve los pedidos de ESTE usuario.
foreach ($usuario->pedidos as $pedido) {
    echo $pedido->fecha;
}
Copied!