Symfony2 - 一个捆绑中的两个数据库连接 - 似乎无法设置它 - 请参阅我的代码

时间:2013-12-07 08:41:41

标签: php symfony doctrine-orm

这就是我想要做的事情:

namespace BundleTwo\Controller;

use BundleOne\Entity\TestEntity;

class TestController
{

    public function pageAction()
    {

        $insert = new TestEntity();
        $insert->fieldName('test');
        $em = $this->getDoctrine()->getManager('dbcon2');   
        $em->persist($insert);
        $em->flush();

    }

}

...所以上面的代码在Bundle 2中,它使用了Bundle 1中的Entity - 但它需要使用DB connection2。

我可以使用这个http://symfony.com/doc/current/cookbook/doctrine/multiple_entity_managers.html来设置两个数据库连接,我可以看到如何定义一个包使用哪个EM,但我希望一个包有2个连接。

我认为上面的代码可行,但是当我运行app / console doctrine:schema:update --em = dbcon2时,它不会填充数据库中的任何内容,也不会检测到任何实体。我想我需要知道Bundle 2和DB 2也使用BundleOne \ Entity \ TestEntity。

如果我可以在BundleTwo中设置设置用于BundleOne \ Entity \ TestEntity的数据库连接的设置,那么可能会这样做。

2 个答案:

答案 0 :(得分:3)

您可以使用mapping属性

指定哪些包含实体元数据
doctrine:
    orm:
        default_entity_manager:   dbcon1
        entity_managers:
            dbcon1:
                connection: dbcon1
                mappings:
                    BundleOne: ~
            dbcon2:
                connection: dbcon2
                mappings:
                    BundleOne: ~

答案 1 :(得分:0)

正如您所推测的那样,您必须告诉每个实体经理在查找实体时要使用哪些捆绑包。

类似的东西:

orm:
    default_entity_manager:       default
    auto_generate_proxy_classes: %kernel.debug%
   #auto_mapping: true

    entity_managers:

        default:
            connection: default
            mappings:

        games:
           connection: games
           mappings:
                CeradGameBundle: ~

        accounts:
           connection: accounts
           mappings:
                FOSUserBundle: ~
                CeradAccountBundle: ~

所以你的dbcon2会列出bundle 1和bundle 2。如果这个答案没有用,那么请更新你的问题并显示你的学说orm配置。