ORM para PHP: comparación de Doctrine, Eloquent y Cycle — ejemplos de código

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

ORM para PHP: comparación y ejemplos



ORM (Object-Relational Mapping) es una capa intermedia entre el código PHP y la base de datos relacional. Convierte filas de tablas en objetos y consultas SQL en métodos. Para PHP existen varias soluciones ORM maduras. En este artículo analizaremos las tres más populares: Doctrine, Eloquent (de Laravel) y Cycle. Conocerá su filosofía, sintaxis y obtendrá ejemplos de código listos para usar.



1. Doctrine ORM — Data Mapper



Doctrine es el ORM más potente y maduro para PHP. Utiliza el patrón Data Mapper: las entidades (Entity) no conocen la base de datos, y todo el trabajo con la BD se realiza a través de repositorios y el gestor de entidades EntityManager.



// Ejemplo de entidad en Doctrineuse Doctrine\\ORM\\Mapping as ORM;

/** * @ORM\\Entity * @ORM\\Table(name="users") */class User{ /** @ORM\\Id @ORM\\Column(type="integer") @ORM\\GeneratedValue */ private int $id;

/** @ORM\\Column(type="string", length=100) */ private string $name;

public function getName(): string { return $this->name; }

public function setName(string $name): void { $this->name = $name; }}

// Guardar y obtener$user = new User();$user->setName('Alexey');$entityManager->persist($user);$entityManager->flush();

$users = $entityManager->getRepository(User::class)->findAll();


2. Eloquent ORM — Active Record



Eloquent es el ORM del framework Laravel. Utiliza el patrón Active Record: cada objeto sabe cómo guardarse a sí mismo en la BD. El código es compacto e intuitivo, ideal para desarrollo rápido.



// Modelo Eloquentuse Illuminate\\Database\\Eloquent\\Model;

class User extends Model{ protected $table = 'users'; protected $fillable = ['name'];}

// Crear registro$user = User::create(['name' => 'María']);

// Leer$users = User::where('name', 'like', '%Mar%')->get();

foreach ($users as $user) { echo $user->name;}

// Actualizar$user = User::find(1);$user->name = 'Olga';$user->save();


3. Cycle ORM — enfoque híbrido



Cycle es un ORM moderno de los autores del framework Spiral. Combina las mejores características de Data Mapper y Active Record. Funciona más rápido que Doctrine gracias al almacenamiento en caché del esquema y la ausencia de magia. Soporta tipado estricto.



// Entidad Cycleuse Cycle\\Annotated\\Annotation as Cycle;

/** * @Cycle\\Entity * @Cycle\\Table(name="users") */class User{ /** @Cycle\\Column(type="primary") */ public int $id;

/** @Cycle\\Column(type="string") */ public string $name;}

// Guardar$user = new User();$user->name = 'Iván';$orm->persist($user);$orm->run();

// Buscar$users = $orm->getRepository(User::class)->select()->fetchAll();


Comparación de ORM para PHP



Característica Doctrine Eloquent Cycle
Patrón Data Mapper Active Record Híbrido
Rendimiento Medio Alto (con caché) Alto
Relación con el framework Independiente Laravel Spiral / independiente
Generación de migraciones Integrada A través de Artisan

Recommendations