
Um resumo sobre o WSL2
O WSL 2 (Windows Subsystem for Linux) representa um grande avanço na integração entre o Windows e o Linux, permitindo... Leia mais
Desenvolvedor de Software
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;
}
}
O WSL 2 (Windows Subsystem for Linux) representa um grande avanço na integração entre o Windows e o Linux, permitindo... Leia mais
Enviar mensagens de email é uma parte essencial de muitas aplicações web, e o Laravel, um popular framework PHP, torna... Leia mais
Segue uma lista das extensões que mais utilizo em meu dia a dia como desenvolvedor quando uso o editor VisualStudio... Leia mais
Configurar e gerenciar bancos de dados pode ser uma tarefa desafiadora, especialmente quando você precisa garantir a portabilidade e a... Leia mais