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 |
También en la biblioteca
Biblioteca kotlinx.serialization para procesamiento JSON en Kotlin
Parseo de HTML en Java: Jsoup, HtmlUnit y otras herramientas
Tokens JWT en PHP: Guía completa de autenticación y autorización
ORM para C++: comparación y ejemplos de uso de bibliotecas
Recommendations |