2011-10-27 24 views
1

J'ai une forme, et une colonne a le type Entity, mais cette entité a une autre connexion.Modification de la connexion de doctrine sur la classe de formulaire et les accessoires Doctrine

Dans l'action que je peux $em->getDoctrine()->getEntityManager('name')

Comment modifier la connexion en classe de formulaire?

Peut-être peut éventuellement changer de connexion dans la classe d'entité. Vous aimez cette

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

mise à jour:

J'ai trouvé réponse ici :)

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

Mais comment je peux modifier la connexion dans la classe des appareils 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 le travail na pas :(

Répondre

0

Lorsque les appareils de chargement, vous pouvez utiliser le drapeau lors de l'exécution de la commande de la console pour changer le gestionnaire d'entités:

Executing Fixtures

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

Vous pouvez également consulter cette section dans e même docs:

Using the container in fixtures

Si votre classe de fixation a accès au conteneur alors vous pouvez charger un gestionnaire d'entités que vous souhaitez.

$container->get('doctrine')->getEntityManager('manager_name'); 
+0

son '$ container-> get ('doctrine') -> getEntityManager ('manager_name');' doest work – rtyshyk

+0

Vrai ... ça aurait dû ressembler plus à '$ this-> container-> get ('doctrine') -> getEntityManager ('manager_name');' tant que votre appareil est conscient du conteneur comme décrit dans le lien ci-dessus. C'est le bit important si vous souhaitez le faire de cette façon, votre appareil doit implémenter 'ContainerAwareInterface'. Passer le nom du manager sur la ligne de commande est probablement une méthode plus simple. – Kasheen

+0

Mettre à jour la question. – rtyshyk

0

Si votre appareil dispose d'un accès au contenant, avec votre configuration réelle config.yml: orm: default_entity_manager: default entrez le code ici entity_managers: owner: connection: owner mappings: RealestateCoreBundle: Entity: MyEntity

vous pouvez appeler le gestionnaire d'entités comme:

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

Questions connexes