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
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;
}
}
PostgreSQL é um dos sistemas de gerenciamento de banco de dados mais populares, conhecido por sua robustez e recursos avançados.... Leia mais
Vamos lá! Em um dia qualquer estava eu a rolar o feed do Linked-In e um determinado post me chamou... Leia mais
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
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