ORM para PHP: visão geral e comparação de bibliotecas populares
ORM (Object-Relational Mapping) é uma tecnologia que permite trabalhar com bancos de dados através de objetos da linguagem de programação, em vez de consultas SQL. No PHP, existem várias bibliotecas ORM poderosas, cada uma com suas próprias características, vantagens e desvantagens. Neste artigo, compararemos detalhadamente quatro soluções mais populares: Doctrine, Eloquent, Propel e RedBeanPHP. Você aprenderá como elas funcionam, verá exemplos de código e poderá fazer uma escolha consciente para o seu projeto.
1. Doctrine — controle total e DQL poderoso
Doctrine é o ORM mais maduro e funcionalmente rico para PHP. Ele consiste em dois componentes: DBAL (Database Abstraction Layer) e ORM (Object-Relational Mapping). O Doctrine usa o padrão Data Mapper, o que significa uma separação completa entre a lógica de negócios e a lógica de armazenamento de dados.
Principais características:
- Suporte completo ao Doctrine Query Language (DQL) — SQL orientado a objetos
- Sistema flexível de migrações (Doctrine Migrations)
- Carregamento preguiçoso e ativo de relacionamentos (Lazy/Eager Loading)
- Suporte ao ciclo de vida de entidades baseado em eventos
- Cache integrado (de metadados, consultas, resultados)
Exemplo de código:
<?php// Definição da entidade (Entity)use 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;
/** @ORM\\Column(type="string", unique=true) */ private string $email;
// Getters e setters public function getName(): string { return $this->name; } public function setName(string $name): void { $this->name = $name; } public function getEmail(): string { return $this->email; } public function setEmail(string $email): void { $this->email = $email; }}
// Uso$entityManager = EntityManager::create($connectionParams, $config);$user = new User();$user->setName('Ivan Petrov');$user->setEmail('ivan@example.com');$entityManager->persist($user);$entityManager->flush();
// Consulta via DQL$query = $entityManager->createQuery('SELECT u FROM App\\Entity\\User u WHERE u.email = :email');$query->setParameter('email', 'ivan@example.com');$result = $query->getOneOrNullResult();2. Eloquent — simplicidade e elegância (Laravel)
Eloquent é o ORM que faz parte do framework Laravel, mas também está disponível para uso separado através do pacote illuminate/database. Ele usa o padrão Active Record, onde cada modelo representa uma linha na tabela do BD. Eloquent é famoso por sua sintaxe intuitiva e gerenciamento automático de relacionamentos.
Principais características:
- Configuração mínima — convenções em vez de configuração
- Relacionamentos poderosos: belongsTo, hasMany, belongsToMany e outros
- Gerenciamento automático de timestamps (created_at, updated_at)
- Scopes, mutators e accessors integrados
- Suporte a coleções e paginação
Exemplo de código:
<?phpuse Illuminate\\Database\\Eloquent\\Model;
class User extends Model{ protected $table = 'users'; protected $fillable = ['name', 'email']; protected $hidden = ['password'];
// Relacionamento "um para muitos" public function posts() { return $this->hasMany(Post::class); }}
// Criando registro$user = User::create([ 'name' => 'Anna Smirnova', 'email' => 'anna@example.com',]);
// Consulta com condições$activeUsers = User::where('status', 'active') Também na biblioteca
Filas de Tarefas em Java: do ThreadPoolExecutor ao Disruptor
Glide/Coil para Kotlin: guia completo com exemplos
GraphQL em Kotlin: Visão geral das bibliotecas e ferramentas para desenvolvimento de servidor