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.

Plusieurs BDD

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');

Ce que je veux

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

5 réponses


SamghamiTM
Auteur
Réponse acceptée

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.

As-tu essayé la solution que je te propose ?