Verander de doctrine-connectie op form class en Doctrine Fixtures

Ik heb een bepaalde vorm en een kolom heeft het type Entiteit , maar deze entiteit heeft een andere verbinding.

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

Hoe de verbinding in form class te veranderen?

Misschien kan verbinding in entiteitsklasse mogelijk veranderen. Zoals dit

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

UPDATE:

Ik vond het antwoord hier :)

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

Maar hoe kan ik de verbinding in de klasse data fixtures veranderen?

Ik probeer:

<?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();
    }

}

maar werkte niet :(

1

2 antwoord

Bij het laden van armaturen kunt u de vlag gebruiken bij het uitvoeren van de consoleopdracht om de entity manager te wijzigen:

Fixtures uitvoeren

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

Als alternatief kunt u dit gedeelte in dezelfde documenten bekijken:

Gebruik van de container in armaturen

Als uw fixtureklasse toegang heeft tot de container, kunt u elke gewenste entiteitsbeheerder laden.

$container->get('doctrine')->getEntityManager('manager_name');
0
toegevoegd
True ... het had meer moeten lijken op $ this-> container-> get ('doctrine') -> getEntityManager ('manager & zwnj; _name'); zolang je armatuur container-bewust is zoals beschreven in de link hierboven. Dat is het belangrijke bit als je het op deze manier wilt doen, je armatuur moet ContainerAwareInterface implementeren. Het is echter waarschijnlijk een gemakkelijkere methode om de naam van de manager op de opdrachtregel door te geven.
toegevoegd de auteur Kasheen, de bron
Ah ja, want je moet nog steeds de terugkeer naar de manager toewijzen en deze gebruiken ... $ manager = $ this-> container-> get ('doctrine') -> getEntityManager ('owner') & zwnj;; of je kunt normale fixtures uitvoeren met PHP app/console doctrine: fixtures: load --em = owner
toegevoegd de auteur Kasheen, de bron
zijn $ container-> get ('doctrine') -> getEntityManager ('manager_name' & zwnj;); doest werk
toegevoegd de auteur rtyshyk, de bron
Vraag bijwerken.
toegevoegd de auteur rtyshyk, de bron

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

je kunt de entiteitbeheerder zo bellen:

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

0
toegevoegd