ORM para PHP: comparação entre Doctrine, Eloquent e Cycle — exemplos de código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

ORM para PHP: comparação e exemplos



ORM (Object-Relational Mapping) é uma camada entre o código PHP e o banco de dados relacional. Ela transforma linhas de tabelas em objetos e consultas SQL em métodos. Para PHP, existem várias soluções ORM maduras. Neste artigo, analisaremos as três mais populares: Doctrine, Eloquent (do Laravel) e Cycle. Você conhecerá suas filosofias, sintaxes e obterá exemplos de código prontos.



1. Doctrine ORM — Data Mapper



Doctrine é a ORM mais poderosa e madura para PHP. Utiliza o padrão Data Mapper: as entidades (Entity) não conhecem o banco de dados, e todo o trabalho com o BD é realizado através de repositórios e do gerenciador de entidades EntityManager.



// Exemplo de entidade no 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; }}

// Salvando e recuperando$user = new User();$user->setName('Alexey');$entityManager->persist($user);$entityManager->flush();

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


2. Eloquent ORM — Active Record



Eloquent é a ORM do framework Laravel. Utiliza o padrão Active Record: cada objeto sabe como se salvar no BD. O código é compacto e intuitivo, ideal para desenvolvimento rápido.



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

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

// Criando um registro$user = User::create(['name' => 'Maria']);

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

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

// Atualização$user = User::find(1);$user->name = 'Olga';$user->save();


3. Cycle ORM — abordagem híbrida



Cycle é uma ORM moderna dos criadores do framework Spiral. Combina as melhores características do Data Mapper e do Active Record. Funciona mais rápido que o Doctrine devido ao cache de esquema e à ausência de magia. Suporta tipagem estrita.



// Entidade 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;}

// Salvando$user = new User();$user->name = 'Ivan';$orm->persist($user);$orm->run();

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


Comparação de ORMs para PHP



Característica Doctrine Eloquent Cycle
Padrão Data Mapper Active Record Híbrido
Desempenho Médio Alto (com cache) Alto
Vínculo com framework Independente Laravel Spiral / independente
Geração de migrações Integrada Via Artisan

Recommendations