フォームクラスとDoctrine Fixturesのdoctrine接続を変更する

いくつかのフォームがあり、1つのカラムには Entity タイプがありますが、このエンティティには別の接続があります。

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

フォームクラスで接続を変更するには?

おそらくエンティティクラスの接続を変更する可能性があります。 このような

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

更新しました:

私はここで答えを見つけた:)

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

しかし、データフィクスチャクラスでどのように接続を変更できますか?

私は試みます:

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

}

しかし、仕事をしなかった:(

1
追加された 編集された
ビュー: 3

2 答え

フィクスチャをロードするときは、コンソールコマンドを実行してエンティティマネージャを変更するときにフラグを使用できます。

施設の実行

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

あるいは、同じ文書でこのセクションをチェックアウトすることもできます:

備品のコンテナを使用する< a>

あなたのフィクスチャクラスがコンテナへのアクセス権を持っているなら、あなたが望む任意のエンティティマネージャをロードすることができます。

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

0
追加された
true ...あなたの什器がコンテナを意識している限り、 $ this-> container-> get( 'doctrine') - > getEntityManager( 'manager&zwnj; _name'); 上記のリンクで説明したとおりです。これをこのようにしたい場合は重要なビットですが、あなたのフィクスチャは ContainerAwareInterface を実装する必要があります。しかし、コマンドラインでマネージャーの名前を渡す方が簡単な方法かもしれません。
追加された 著者 Kasheen,
ああ、マネージャーにリターンを割り当てて使用する必要があるので、そうです。 $ manager = $ this-> container-> get( 'doctrine') - > getEntityManager( 'owner')&zwnj; または通常のフィクスチャを PHP app/consoleで実行することができます。doctrine:fixtures:load --em = owner
追加された 著者 Kasheen,
その $ container-> get( 'doctrine') - > getEntityManager( 'manager_name'&zwnj;); 仕事をする
追加された 著者 rtyshyk,
質問を更新します。
追加された 著者 rtyshyk,

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

次のようにエンティティマネージャを呼び出すことができます:

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

0
追加された