Primeiros passos com Doctrine ORM \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 04 Horas 

 59 Min 

 39 Seg 

   Tempo restante da oferta: 04 59 39 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Primeiros passos com Doctrine ORM  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

# Primeiros passos com Doctrine ORM

 Conheça os principais conceitos do Doctrine ORM, como entidade, mapeamento e Entity Manager. Veja também como executar um exemplo prático de criação de registro no banco de dados.

 [ Elton Fonseca ](https://www.treinaweb.com.br/blog/autor/elton-fonseca) 7 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/12/09153638/doctrine-ORM.png)  

O Doctrine ORM é um dos projetos mais importantes do conjunto de projetos Doctrine. Ele é um [ORM](https://www.treinaweb.com.br/blog/o-que-e-orm/ "ORM") implementado usando o padrão Data Mapper e pode ser usado desde pequenos projetos até grandes aplicações. Pode ser usado em conjunto com grandes frameworks PHP como [Symfony](https://www.treinaweb.com.br/blog/o-que-e-symfony/ "Symfony"), [Laravel](https://www.treinaweb.com.br/blog/o-que-e-laravel/ "Laravel"), [Zend](https://www.treinaweb.com.br/blog/o-que-e-o-zend-framework/ "Zend"), [Slim](https://www.treinaweb.com.br/blog/o-que-e-o-slim-framework/ "Slim") e outros.

Quando falamos de Doctrine a maioria das pessoas já pensa no ORM, porém o Doctrine é um conjunto de projetos para [PHP](https://www.treinaweb.com.br/blog/o-que-e-php/ "PHP"). Temos um post falando sobre os [principais projetos do Doctrine](https://www.treinaweb.com.br/blog/conheca-os-principais-projetos-do-doctrine/ "principais projetos do Doctrine"), aconselho a leitura antes de prosseguir com este.

[  ![Doctrine ORM - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/doctrine.svg)   Curso Doctrine ORM - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/doctrine-orm-fundamentos)

## Funcionamento e Bancos suportados

O Doctrine ORM funciona sobre outro projeto, o Doctrine DBAL. O DBAL é uma camada de abstração escrita sobre o PDO, ela adiciona uma série de recursos e permite a escrita de código interoperável entre diferentes sistemas gerenciadores de banco de dados.

O Doctrine ORM tira proveito da interoperabilidade do DBAL e da parte de baixo nível do PDO. Essa estrutura permite ao Doctrine ORM suportar os [principais gerenciadores de banco de dados](https://www.treinaweb.com.br/blog/os-principais-sgbds-relacionais/ "principais gerenciadores de banco de dados"):

- MySQL
- PostgreSQL
- SQL Server
- Oracle
- SQLite

## Mapeamento do banco de dados

Quando vamos usar um ORM a primeira coisa que precisamos fazer é realizar o mapeamento entre as tabelas do modelo relacional para o modelo orientado a objetos. No Doctrine ORM temos 4 opções de notações para descrever as características do banco de dados.

- Annotations
- [XML](https://www.treinaweb.com.br/blog/o-que-e-xml/ "XML")
- PHP
- [YAML](https://www.treinaweb.com.br/blog/o-que-e-yaml/ "YAML")

Em aplicações legadas provavelmente encontrará a maioria dos mapeamentos usando XML. Em aplicações mais novas o mapeamento mais utilizado é o através de annotations (comentários que são lidos pelo doctrine).

## Entidade

As entidades são usadas para realizar o mapeamento entre o modelo orientado a objetos e o modelo relacional. Por meio delas conseguimos representar exatamente a estrutura do nosso banco de dados. É possível definir nome de tabelas, colunas, chave primária e relacionamentos.

Na imagem abaixo, podemos ver a representação entre o modelo orientado a objetos a esquerda e o modelo relacional a direita:

![Modelo de representação ORM](https://dkrn4sk0rn31v.cloudfront.net/2019/11/03082048/ORM-IMG.png)

No projeto as entidades são representadas por classes PHP onde declaramos as propriedades de acordo com a tabela do banco de dados. A entidade produto do exemplo acima, poderia ser representada conforme abaixo:

```php
namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
 */
class Product
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

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

    /**
     * @ORM\Column(type="decimal")
     */
    private $preco;

    /**
     * @ORM\Column(type="text")
     */
    private $descricao;

    public function getId()
    {
        return $this->id;
    }

    public function setNome()
    {
        $this->nome = $nome;
    }

    public function getNome()
    {
        return $this->nome;
    }

    public function setPreco()
    {
        $this->preco = $preco;
    }

    public function getPreco()
    {
        return $this->preco;
    }

    public function setDescricao()
    {
        $this->descricao = $descricao;
    }

    public function getDescricao()
    {
        return $this->descricao;
    }
}

```

Note que os comentários na classe acima iniciam com `@ORM`. Esses comentário são as informações de mapeamento definidas através de annotations.

[  ![PHP - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/php.svg)   Curso PHP - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/php-fundamentos)

## Entity Manager

Se verificar novamente a entidade que mapeamos, verá que ela não estende nenhuma classe da estrutura do Doctrine, ela é apenas uma classe do PHP. Desse modo, para que possamos através dela manipular qualquer informação no banco de dados precisamos de uma classe específica do Doctrine, a Entity Manager.

A Entity Manager ou em português gerenciador de entidades, é a classe do doctrine responsável por gerenciar o estado das entidades e realizar as escritas no banco de dados. Ela implementa um padrão chamado Unit of Work ou em português unidade de trabalho, esse padrão mantém uma lista das alterações realizadas nas entidades monitoradas pelo Entity Manager em memória e organiza a parte de escrita dessas alterações no banco de dados de forma consistente, quando solicitado.

## Obtendo a instância do Entity Manager

O processo de obtenção da instância da classe Entity Manager vai depender muito de onde está usando o Doctrine. Abaixo alguns links de referência para alguns frameworks:

- [Symfony](https://symfony.com/doc/current/doctrine.html#persisting-objects-to-the-database "Symfony")
- [Laravel com pacote laraveldoctrine](https://www.laraveldoctrine.org/docs/1.4/orm/entity-manager "Laravel com pacote laraveldoctrine")
- [Slim](http://www.slimframework.com/docs/v3/cookbook/database-doctrine.html "Slim")

Se estiver usando o Doctrine sem nenhum Framework terá algo parecido com isso:

```php
require_once "vendor/autoload.php";

use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;

$paths = [__DIR__."/src/Entities"];
$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, null, null, false);

//aqui configuramos a conexão com banco de dados
$params = [
    'url' => "mysql://usuario:senha@servidor/nome-banco"
];

//Obter a instância da classe Entity Manager
$entityManager = EntityManager::create($params, $config);

```

Lembrando que para o exemplo acima funcionar é necessário instalar o pacote do Doctrine ORM usando o composer:

```
composer require doctrine/orm

```

## Persistindo dados

Usamos o Entity Manager para persistir informações no banco de dados. Vamos criar um novo registro no banco de dados através da entidade que defimos chamada produto.

Primeira coisa precisamos criar uma instância e definir os dados do produto:

```php
$produto = new Produto;

$produto->setNome('Bicicleta');
$produto->setPreco(800);
$produto->setDescricao('Engrenagem fixa, azul, rápida')

```

Veja que estamos usando métodos setters. Isso porque nossas propriedades da entidade são sempre privadas, com isso precisamos usar os métodos setters e getters para conseguir manipular os valores.

Agora com a instância da entidade produto já definida, podemos indicar ao Entity Manager que ela deve ser persistida no banco de dados:

```php
$entityManager->persist($produto);

```

No exemplo a instância da classe Entity Manager está dentro da variável `$entityManager`, mas poderia ser qualquer nome, dependendo de onde está usando. O importante é entender o que o método `persist` está fazendo, indicando que a instância deve ser monitorada.

Por fim, precisamos pedir para o Entity Manager realizar as alterações no banco de dados, pois até agora os dados estão apenas em memória. Para isso usamos o método `flush`:

```php
$entityManager->flush();

```

Pronto! Se tiver a tabela corretamente criada e os parâmetros de conexão estiverem certos, verá o registro no banco de dados.

## Considerações Finais

O Doctrine é um ORM extremamente poderoso com dezenas de recursos. Nos próximos posts vamos aprender os diferentes modos de consultar informações no banco de dados e também como configurar relações.

[  ![Desenvolvedor PHP Sênior](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/php.svg)   Formação Desenvolvedor PHP Sênior Conhecer a formação ](https://www.treinaweb.com.br/formacao/desenvolvedor-php-senior)

- [ #ORM ](https://www.treinaweb.com.br/blog/tag/orm)
- [ #Doctrine ](https://www.treinaweb.com.br/blog/tag/doctrine)

Autor

 ![Elton Fonseca](//secure.gravatar.com/avatar/2cee05645357ced0841ce76ba5569c72?d=mm)

## Elton Fonseca

 Professor e desenvolvedor. Formado em análise e desenvolvimento de sistema, pós graduado em engenharia e arquitetura de software. É autor de cursos em diversos temas, como, desenvolvimento back-end, cloud computing e CMSs. Nas horas vagas adora estudar sobre o mercado financeiro, cozinhar e brincar com pequeno Daniel. [@eltonfonsecadev](https://twitter.com/eltonfonsecadev) 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/elton-fonseca)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/03/06135633/AMAZON-AURORA-400x280.png)  [ Bancos de Dados ](https://www.treinaweb.com.br/blog/categoria/bancos-de-dados) 

     7 anos atrás

    ##  [ Primeiros passos com o Amazon Aurora ](https://www.treinaweb.com.br/blog/primeiros-passos-com-o-amazon-aurora) 

     O Amazon Aurora é um banco de dados relacional da AWS compatível com MySQL e PostgreSQL. Nesse artigo vamos entender os benefícios do Amazon Aurora e como podemos criar nosso primeiro cluster utilizando o AWS CLI.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/08/30114919/MYSQL-PRIMEIROS-PASSOS-400x280.png)  [ Bancos de Dados ](https://www.treinaweb.com.br/blog/categoria/bancos-de-dados) 

     7 anos atrás

    ##  [ Primeiros passos com MySQL ](https://www.treinaweb.com.br/blog/primeiros-passos-com-mysql) 

     Veja neste artigo como dar os primeiros passos utilizando o MySQL.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/05/22213218/PRIMEIROS-PASSOS-GIT-400x280.png)  [ Controle de versão ](https://www.treinaweb.com.br/blog/categoria/controle-de-versao) 

     8 anos atrás

    ##  [ Primeiros passos com o Git ](https://www.treinaweb.com.br/blog/primeiros-passos-com-o-git) 

     Neste artigo veremos o que é Git e seus principais comandos.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/07/29063506/git-1-400x280.png)  [ Git ](https://www.treinaweb.com.br/blog/categoria/git) 

     7 anos atrás

    ##  [ Comandos do Git que você precisa conhecer - Parte 1 ](https://www.treinaweb.com.br/blog/comandos-do-git-que-voce-precisa-conhecer-parte-1) 

     Domine o Git ao conhecer comandos e truques que facilitarão o seu trabalho.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/05/21103619/CAPA-GITHUB-20-05-400x280.png)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     8 anos atrás

    ##  [ Hospedando o Portfólio criado com o Pingendo ](https://www.treinaweb.com.br/blog/hospedando-o-portfolio-criado-com-o-pingendo) 

     Neste artigo veremos como hospedar o portfólio criado com o Pingendo no GitHub Pages.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/08/o-que-e-wordpress-e-como-instalar-na-sua-maquina-400x280.png)  [ WordPress ](https://www.treinaweb.com.br/blog/categoria/wordpress) 

     6 anos atrás

    ##  [ O que é Wordpress e como instalar na sua máquina ](https://www.treinaweb.com.br/blog/o-que-e-wordpress-e-como-instalar-na-sua-maquina) 

     Saiba o que é o WordPress e aprenda a instalar localmente em sua máquina.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/04/Formas_de_se_trabalhar_com_o_Bootstrap_5-400x280.jpg)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     5 anos atrás

    ##  [ Formas de se trabalhar com Bootstrap 5 ](https://www.treinaweb.com.br/blog/formas-de-se-trabalhar-com-bootstrap-5) 

     Existem algumas maneiras diferentes de se trabalhar com Bootstrap em nossos projetos, vamos descobrir todas as formas do uso do framework.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/07/SEO-WORDPRESS-YOAST-400x280.png)  [ CMS's e E-commerce ](https://www.treinaweb.com.br/blog/categoria/cmss-e-e-commerce) 

     6 anos atrás

    ##  [ Otimizando conteúdo para SEO no Wordpress com Yoast ](https://www.treinaweb.com.br/blog/otimizando-conteudo-para-seo-no-wordpress-com-yoast) 

     Aprenda a otimizar o SEO de suas páginas e posts utilizando o Plugin Yoast SEO para Wordpress e eleve os resultados do seu blog!

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/06/GUIA-CSS-400x280.jpg)  [ CSS ](https://www.treinaweb.com.br/blog/categoria/css) 

     3 anos atrás

    ##  [ Guia da linguagem CSS ](https://www.treinaweb.com.br/blog/guia-da-linguagem-css) 

     Nesse guia completo veremos como funciona e quais as formas de criar estilizações com CSS, necessário para qualquer desenvolvedor front-end

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/11/O-QUE-E-HTML-400x280.jpg)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     4 anos atrás

    ##  [ O que é HTML? ](https://www.treinaweb.com.br/blog/o-que-e-html) 

     No artigo de hoje, será abordado o tema HTML, nele irá conter desde sua história, quem o criou e como deve ser montada sua estrutura.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/cordova-400x280.jpg)  [ Android ](https://www.treinaweb.com.br/blog/categoria/android) 

     10 anos atrás

    ##  [ Aprenda a instalar o Cordova com Android no macOS ](https://www.treinaweb.com.br/blog/aprenda-a-instalar-o-cordova-com-android-no-macos) 

     Aprenda a configurar o Cordova para compilar no emulador ou direto no dispositivo Android usando o macOS.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/04/23151556/MÓDULOS-NPM-400x280.png)  [ Node ](https://www.treinaweb.com.br/blog/categoria/node-js) 

     8 anos atrás

    ##  [ Criando módulos globais do NPM ](https://www.treinaweb.com.br/blog/criando-modulos-globais-do-npm) 

     Aprenda a fazer seus próprios módulos globais do NPM e crie ferramentas executadas diretamente do terminal em apenas 5 passos!

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **04h 59min 39s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
