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 modeloProducto(singular). - Si tienes la tabla
users(plural), tendrás el modeloUser(singular).
Para crear un modelo, usamos a nuestro amigo Artisan:
php artisan make:model ProductoEsto 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();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(); 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();D. Borrar (Delete)
$producto = Producto::findOrFail(5);
$producto->delete(); // Adiós registroLa 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;
}