Ändern Sie die Doku-Verbindung in Formularklassen und Doctrine Fixtures

Ich habe ein Formular, und eine Spalte hat den Typ Entity , aber diese Entity hat eine andere Verbindung.

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

Wie ändere ich die Verbindung in der Formularklasse?

Vielleicht kann die Verbindung in der Entity-Klasse möglicherweise geändert werden. So was

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

AKTUALISIERT:

Ich habe die Antwort hier gefunden :)

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

Aber wie kann ich die Verbindung in Daten Fixtures Klasse ändern?

Ich versuche:

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

}

aber hat nicht funktioniert :(

1

2 Antworten

Beim Laden von Fixtures können Sie das Flag verwenden, wenn Sie den Konsolenbefehl ausführen, um den Entity Manager zu ändern:

Ausführen von Fixtures

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

Alternativ können Sie diesen Abschnitt in derselben Dokumentation anzeigen:

Verwendung des Containers in Leuchten

Wenn Ihre Fixture-Klasse Zugriff auf den Container hat, können Sie einen beliebigen Entity Manager laden.

$container->get('doctrine')->getEntityManager('manager_name');
0
hinzugefügt
True ... es sollte eher wie $ this-> container-> get ('doctrine') -> getEntityManager ('manager & zwnj; _name'); sein, solange Ihr Gerät Container-bewusst ist wie im obigen Link beschrieben. Das ist das wichtigste, wenn Sie es so machen wollen, muss Ihr Gerät ContainerAwareInterface implementieren. Es ist wahrscheinlich eine einfachere Methode, den Namen des Managers in der Befehlszeile zu übergeben.
hinzugefügt der Autor Kasheen, Quelle
Ah ja, weil Sie die Rückgabe immer noch dem Manager zuweisen und verwenden müssen ... $ manager = $ this-> container-> get ('doctrine') -> getEntityManager ('owner') & zwnj;; oder Sie können normale Fixtures mit PHP app/console doctrine ausführen: fixtures: load --em = Eigentümer
hinzugefügt der Autor Kasheen, Quelle
Sein $ container-> get ('doctrine') -> getEntityManager ('manager_name' & zwnj;); funktioniert
hinzugefügt der Autor rtyshyk, Quelle
Frage aktualisieren
hinzugefügt der Autor rtyshyk, Quelle

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

Sie können den Entity Manager wie folgt aufrufen:

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

0
hinzugefügt