Bonjour,
Je suis sur un projet de creer une application qui va permettre de mettre en relation beaucoup d'application tierse au sein de mon entreprise.
Pour cela jai chosi d'utiliser Symfony en version 5.2, Php 8.0.2.
J'ai besoin de faire des requête sur 6 BDD MySQL.
Dans un controleur ça ne pose aucune probleme.
$em = $this->getDoctrine()->getManager('mon_manager');
J'aimerai pourvoir faire la même choses dans un service et dans une commande.
J'arrive a charger la connexion "Default" en utilisant le ManagerRepository dans le "__construct" mais je n'arrive pas en utiliser d'autres
Je vous remerci d'avance pour toutes informations me permettant d'avancer dans cette situation
Bonjour,
Merci de ta réponse.
Cependant cela ne me permet pas de charger le manager des différentes connexion.
Voici la solution que le viens de trouver:
ManagerRegistry $managerRegistry
Exemple:
<?php
namespace App\MessageHandler;
use App\Entity\User;
use App\Message\CampainNotificationMessage;
use App\Service\CampainNotifierService;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
class CampainNotificationHandler implements MessageHandlerInterface
{
private $container;
private $notifierService;
private $mr;
private $emDefault;
public function __construct(CampainNotifierService $notifierService, ManagerRegistry $managerRegistry)
{
$this->container = $container;
$this->notifierService = $notifierService;
$this->mr = $managerRegistry;
$this->emDefault = $this->mr->getManager('default');
}
public function __invoke(CampainNotificationMessage $message)
{
$user = $this->emDefault->find(User::class,$message->getUserId());
if($user !== null)
{
$this->notifierService->notify($user);
}
}
}
Bonjour,
Il faut que tu utilises EntityManagerInterface plutôt.
La documentation de ce que tu veux faire se trouve sur cette page
// src/Controller/UserController.php
namespace App\Controller;
// ...
use Doctrine\ORM\EntityManagerInterface;
class UserController extends AbstractController
{
public function index(EntityManagerInterface $entityManager): Response
{
// These methods also return the default entity manager, but it's preferred
// to get it by injecting EntityManagerInterface in the action method
$entityManager = $this->getDoctrine()->getManager();
$entityManager = $this->getDoctrine()->getManager('default');
$entityManager = $this->get('doctrine.orm.default_entity_manager');
// Both of these return the "customer" entity manager
$customerEntityManager = $this->getDoctrine()->getManager('customer');
$customerEntityManager = $this->get('doctrine.orm.customer_entity_manager');
// ...
}
}
Code issue de la documentation, on peut passer du manager default au manager customer
À mon avis, tu fais une erreur avec ta variable $emDefault, et dans le code en exemple, tu devrais pouvoir faire :
$defaultManager = $entityManager->getManager('default');
$customerEntityManager = $entityManager->getManager('customer')
Bien sûr ici, il s'agit d'un contrôleur mais c'est pareil pour un service.
Justement en ce qui concerne les controlleur aucun souci cest exactement la même façon de faire.
Cependant cela ne fonctionne pas dans les services ou commande.
J'ai fait plusieurs essais aujourd'hui et le code que j'ai indiqué est le code que m'a recommendé Sensiolab sur Twitter en fin de journee.