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 atualizar multiplos registros com o método whereIn no Laravel 9 ?

Como atualizar multiplos registros com o método whereIn no Laravel 9 ?

O Laravel 9 é um framework PHP moderno e poderoso que oferece muitas ferramentas úteis para desenvolvedores web. Uma das... Leia mais

Como instalar o RabbitVCS no ubuntu 18.04

Como instalar o RabbitVCS no ubuntu 18.04

Caso você sendo usuário Linux e precise instalar um gerenciador de SVN temos como alternativa o RABBITVCS. São apenas dois... Leia mais

Como instalar a Linguagem ELIXIR no Linux.

Como instalar a Linguagem ELIXIR no Linux.

Elixir é uma linguagem de programação dinâmica e funcional, desenvolvida por José Valim em 2011, projetada para construir aplicações escaláveis... Leia mais

Laravel: Trabalhando com whereHas e with de forma simples

Laravel: Trabalhando com whereHas e with de forma simples

Quando trabalhamos com Eloquent no Laravel, frequentemente precisamos realizar consultas baseadas em relacionamentos entre modelos. Para isso, o Laravel oferece... Leia mais