Changer la connexion de la doctrine sur la classe de formulaire et les indicateurs de doctrine

J'ai un formulaire et une colonne a le type Entity , mais cette entité a une autre connexion.

In action i can $em->getDoctrine()->getEntityManager('name')

Comment changer de connexion en classe de formulaire?

Peut-être peut éventuellement changer la connexion dans la classe d'entité. Comme ça

orm:
    default_entity_manager: default
    entity_managers:
        owner:
            connection: owner
            mappings:
                RealestateCoreBundle:
                    Entity: MyEntity

MIS À JOUR:

J'ai trouvé la réponse ici :)

http://symfony.com/doc/2.0/reference/forms /types/entity.html#em

Mais comment puis-je changer de connexion en classe de fixtures de données?

J'essaie:

<?php

namespace Realestate\CoreBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\FixtureInterface;
use Realestate\CoreBundle\Entity\Owner;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

class OwnerFixtures implements FixtureInterface, ContainerAwareInterface
{

    private $container;

    public function setContainer(ContainerInterface $container = null)
    {
        $this->container = $container;
    }

    public function load($manager)
    {
        $this->container->get('doctrine')->getEntityManager('owner');

        for ($i = 0; $i < 100; $i++) {
            $owner = new Owner();
            $owner->setName('name-' . $i);
            $owner->setTelephone(mt_rand(100000, 999999));
            $manager->persist($owner);
        }

        $manager->flush();
    }

}

mais n'a pas fonctionné :(

1

2 Réponses

Lors du chargement des appareils, vous pouvez utiliser l'indicateur lors de l'exécution de la commande de console pour changer le gestionnaire d'entités:

Exécution de programmes

php app/console doctrine:fixtures:load --em=manager_name

Sinon, vous pouvez consulter cette section dans les mêmes documents:

a>

Si votre classe de fixture a accès au conteneur, vous pouvez charger le gestionnaire d’entités de votre choix.

$container->get('doctrine')->getEntityManager('manager_name');
0
ajouté
Vrai ... cela aurait dû ressembler davantage à $ this-> conteneur-> get ('doctrine') -> getEntityManager ('manager & zwnj; _name'); tant que votre fixture est sensible au conteneur comme décrit dans le lien ci-dessus. C'est l'élément le plus important si vous souhaitez le faire de cette façon, votre appareil doit implémenter ContainerAwareInterface . Transmettre le nom du responsable sur la ligne de commande est probablement une méthode plus simple.
ajouté l'auteur Kasheen, source
Ah oui, car vous devez toujours affecter le retour à manager et l'utiliser ... $ manager = $ this-> conteneur-> get ('doctrine') -> getEntityManager ('propriétaire') & zwnj;; ou vous pouvez exécuter des installations normales avec PHP app/console doctrine: fixtures: load --em = propriétaire
ajouté l'auteur Kasheen, source
son $ conteneur-> get ('doctrine') -> getEntityManager ('manager_name' & zwnj;); fait son travail
ajouté l'auteur rtyshyk, source
Mise à jour de la question.
ajouté l'auteur rtyshyk, source

If your fixture has access to container, with your actual config in config.yml : orm: default_entity_manager: defaultenter code here entity_managers: owner: connection: owner mappings: RealestateCoreBundle: Entity: MyEntity

vous pouvez appeler le responsable d'entité comme suit:

$manager = $this->container->get('doctrine.orm.owner_entity_manager');

0
ajouté