DaniPoletto / doctrine

Projeto desenvolvido durante curso de Doctrine da Alura | Project developed during Doctrine Course at Alura

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Doctrine

Esse projeto foi desenvolvido durante o curso de Doctrine da Alura.

O Doctrine Project é um conjunto de bibliotecas PHP focadas principalmente em fornecer serviços de persistência e funcionalidades relacionadas. (wikipedia)

Antes de começar a utiliza-lo, é necessário instalar o composer.

Com o composer instalado, o próximo passo é instalar o doctrine pelo terminal com o comando:

composer require doctrine/orm

E para configurar o autoload através do composer é preciso editar o arquivo composer.json:

{
    "require": {
        "doctrine/orm": "^2.11"
    },
    "autoload": {
        "psr-4": {
            "Alura\\Doctrine\\" : "src/"
        }
    }
}

Em seguida, rode o comando no terminal:

 composer dumpautoload

Caso necessário, rode também:

composer require symfony/cache
composer require doctrine/annotations

Comandos úteis

Mostrar os comandos disponiveis pelo doctrine:

php bin/doctrine.php

Mapear uma classe:

vendor\bin\doctrine.bat orm:info

Criar o esquema/sql:

vendor\bin\doctrine.bat orm:schema-tool:create

Para instalar as migrations:

composer require doctrine/migrations

Para configurar as migrations: configuração

Utilizando injeção de dependência é criado um gerenciador de entidade que irá fazer as operações necessárias no banco.

A classe EntityManagerInterface necessita ser importada.

    /**
     * @var EntityManagerInterface
     */
    private $entityManager;

    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->entityManager = $entityManager;
    }

O método persist 'observa' a entidade que recebe como parametro até que seja utilizado o método flush para de fato persistir as alterações no banco.

As alterações são mapeadas em memória otimizando a performance da aplicação.

        $this->entityManager->persist($medico);
        $this->entityManager->flush();

Caso a entidade seja obtida por meio do repositório, não há necessidade de usar o método persist pois o doctrine já 'observa' automaticamente essa entidade.

Usando anotações para definir informações das colunas da tabela a ser criada

    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
     public $id;

No código acima é informado que o atributo id é um campo do tipo identificador com valor gerado automaticamente e no formato inteiro.

Para informar um formato texto (char, varchar, text) basta fazer da seguinte forma:

@ORM\Column(type="string")

Gerar uma migration, comparando o seu banco de dados atual com as informações de mapeamento:

vendor\bin\doctrine-migrations migrations:diff

Executa todas as migrations:

vendor\bin\doctrine-migrations migrations:migrate

Retornar informações de uma entidade mapeada

vendor\bin\doctrine orm:mapping:describe Curso

Retorna um repositório (de médicos)

$repositorioDeMedicos = $this->getDoctrine()->getRepository(Medico::class);

Retorna todos os médicos com esse repositório

$medicoList = $repositorioDeMedicos->findAll();

About

Projeto desenvolvido durante curso de Doctrine da Alura | Project developed during Doctrine Course at Alura


Languages

Language:PHP 100.0%