PauloRB.dev

Desenvolvedor de Software

Como acessar o entity Manager(Doctrine) dentro de comandos no Symfony 5 | PauloRB.dev Como acessar o entity Manager(Doctrine) dentro de comandos no Symfony 5 - PauloRB.dev
Como acessar o entity Manager(Doctrine) dentro de comandos no Symfony 5

Como acessar o entity Manager(Doctrine) dentro de comandos no Symfony 5

Ao termos de criar comandos personalizados no Symfony na maioria das vezes se faz necessário o uso de alguma interação no banco de dados quer seja a criação, edição ou até mesmo a exclusão de um registro.

No exemplo abaixo vamos ver como podemos acessar o EntityManager do Doctrine e assim pode realizar as mais diversas operações que o ORM nos oferece.

Utilizar os recursos do Doctrine em Commands, é bem fácil também, mas não está claro na documentação oficial como faze-lo. Assim como tudo no Symfony 5, você pode injetar serviços através do construtor de Services and Commands, então para obter o EntityManager dentro de um comando, você só precisaria injetar o EntityManagerInterface assim:

<?php

namespace App\Command;

// ...

use Doctrine\ORM\EntityManagerInterface;

class ExampleCommand extends Command
{
    // ...

    private $entityManager;

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

        parent::__construct();
    }
    
    // ...
}

O gerenciador de entidades(EntityManager) estará acessível a toda a classe e você poderá executar consultas, criar e persistir entidades como costuma fazer em controladores e serviços.
Vamos ver alguns exemplos:
Detalhes de como criar um comando no Symfony foram omitidos por entedermos que essa parte você já tem ententimento e de que o código abaixo é bem autoexplicativo.

<?php

// src/Command/ExampleCommand.php
namespace App\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

// 1. Import the ORM EntityManager Interface
use Doctrine\ORM\EntityManagerInterface;

class ExampleCommand extends Command
{
    // o nome do comando (a parte depois de "bin/console")
    protected static $defaultName = 'app:run-example';
    
    // 2. Exponha o EntityManager no nível de classe
    private $entityManager;

    public function __construct(EntityManagerInterface $entityManager)
    {
        // 3. Atualize o valor da variável privada entityManager por meio de injeção
        $this->entityManager = $entityManager;

        parent::__construct();
    }
    
    protected function configure()
    {
        // ...
    }

    // 4. Use o entityManager no código do comando
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $em = $this->entityManager;
        
        // A. Access repositories
        $repo = $em->getRepository("App:SomeEntity");
        
        // B. Search using regular methods.
        $res1 = $repo->find(1);
        $res2 = $repo->findBy(['field' => 'value']);
        $res3 = $repo->findAll();
        $res4 = $repo->createQueryBuilder('alias')
            ->where("alias.field = :fieldValue")
            ->setParameter("fieldValue", 123)
            ->setMaxResults(10)
            ->getQuery()
            ->getResult();
        
        // C. Persist and flush
        $em->persist($someEntity);
        $em->flush();
         
        return 0;
    }
}

Referência: https://ourcodeworld.com/articles/read/1131/how-to-access-the-entity-manager-doctrine-inside-a-command-in-symfony-5#

Mais Posts

Como Instalar e Acessar o PostgreSQL no WSL com DBeaver

Como Instalar e Acessar o PostgreSQL no WSL com DBeaver

PostgreSQL é um dos sistemas de gerenciamento de banco de dados mais populares, conhecido por sua robustez e recursos avançados.... Leia mais

Onde aprender React ?

Onde aprender React ?

Vamos lá! Em um dia qualquer estava eu a rolar o feed do Linked-In e um determinado post me chamou... Leia mais

Função para fazer a tecla ENTER funcionar como a tecla TAB em formulários web.

Função para fazer a tecla ENTER funcionar como a tecla TAB em formulários web.

Segue função em Jquery que utilizei muito em projetos para permitir o comportamento da tecla TAB(pular campos do formulários) utilizando... Leia mais

Rascunho para estudo de programação orientada a objetos em Python

Rascunho para estudo de programação orientada a objetos em Python

A orientação a objetos (OO) é um paradigma de programação central em Python, que facilita a organização e estruturação do... Leia mais