Eloquent ORM
Eloquent es el Object-Relational Mapper (ORM) incluido en Laravel, aunque puede usarse de manera independiente en proyectos PHP. Su objetivo es facilitar el trabajo con bases de datos mediante objetos, evitando escribir SQL directamente en la mayoría de los casos y mejorando la legibilidad y mantenibilidad del código.
Con Eloquent, cada tabla de la base de datos se representa mediante una clase, y cada registro de la tabla corresponde a una instancia de esa clase.
Ventajas de Eloquent
- Evita escribir SQL manualmente, reduciendo errores y aumentando la legibilidad.
- Permite trabajar con objetos en lugar de arrays asociativos.
- Facilita operaciones CRUD y relaciones entre tablas.
- Compatible con consultas complejas mediante métodos encadenados (
where,orderBy,limit). - Mejora la mantenibilidad del código en proyectos grandes.
Configuración básica
Para usar Eloquent fuera de Laravel, es necesario instalar el paquete illuminate/database mediante Composer:
composer require illuminate/database
Luego se configura la conexión:
<?php
use Illuminate\Database\Capsule\Manager as Capsule;
require 'vendor/autoload.php';
$capsule = new Capsule;
$capsule->addConnection([
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'miBD',
'username' => 'usuario',
'password' => 'clave',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
]);
$capsule->setAsGlobal();
$capsule->bootEloquent();
Definir un modelo
Cada tabla se representa con una clase que extiende Illuminate\Database\Eloquent\Model. Por ejemplo, la tabla usuarios:
<?php
use Illuminate\Database\Eloquent\Model;
class Usuario extends Model
{
protected $table = 'usuarios'; // Opcional si el nombre sigue la convención
public $timestamps = false; // Desactivar campos created_at y updated_at si no existen
protected $fillable = ['nombre', 'email']; // Campos que se pueden asignar masivamente
}
Operaciones básicas con Eloquent
Crear un nuevo registro
<?php
$usuario = Usuario::create([
'nombre' => 'Ana',
'email' => 'ana@example.com'
]);
echo "Usuario creado con ID: " . $usuario->id;
Leer registros
<?php
// Obtener todos los usuarios
$usuarios = Usuario::all();
foreach ($usuarios as $u) {
echo $u->id . " - " . $u->nombre . " - " . $u->email . "<br>";
}
// Obtener un usuario por ID
$usuario = Usuario::find(1);
echo $usuario->nombre;
Actualizar registros
<?php
$usuario = Usuario::find(2);
$usuario->email = 'nuevo_email@example.com';
$usuario->save();
Eliminar registros
<?php
$usuario = Usuario::find(3);
$usuario->delete();
Consultas más complejas
<?php
// Obtener usuarios cuyo nombre contenga "a"
$usuarios = Usuario::where('nombre', 'like', '%a%')->get();
// Ordenar y limitar resultados
$usuarios = Usuario::orderBy('nombre', 'asc')->take(5)->get();