首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用一个实体管理器和多个数据库不检测模式更改的原则

使用一个实体管理器和多个数据库不检测模式更改的原则
EN

Stack Overflow用户
提问于 2012-12-26 00:28:17
回答 1查看 4.2K关注 0票数 3

使用Symfony-2.1和Doctrine-2.3。我有多个数据库,需要进行跨数据库连接,因此我遵循了以下建议:

并设置多个连接和一个实体管理器。这是app/config/config.yml

代码语言:javascript
复制
doctrine:
    dbal:
        default_connection: db1
        connections:
            db1:
                driver:   pdo_mysql
                host:     127.0.0.1
                dbname:   db1
            db2:
                driver:   pdo_mysql
                host:     127.0.0.1
                dbname:   db2
    orm:
        default_entity_manager: default
        auto_generate_proxy_classes: %kernel.debug%
        entity_managers:
            default:
                auto_mapping: true
                mappings:
                    FirstBundle:
                        type:   annotation
                        dir:    Model
                        prefix: NoiseLabs\FirstBundle\Model
                    SecondBundle:
                        type:   annotation
                        dir:    Model
                        prefix: NoiseLabs\SecondBundle\Model

FirstBundle中的实体类

代码语言:javascript
复制
namespace NoiseLabs\FirstBundle\Model;

/**
 * @ORM\Entity
 * @ORM\Table(name="db1.table1")
 */
class FirstEntity
{
    /**
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
}

SecondBundle中的实体类

代码语言:javascript
复制
namespace NoiseLabs\SecondBundle\Model;

/**
 * @ORM\Entity
 * @ORM\Table(name="db2.table2")
 */
class SecondEntity
{
    /**
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="NoiseLabs\FirstBundle\Model\FirstEntity")
     * @ORM\JoinColumn(name="firstId", referencedColumnName="id", onDelete="CASCADE")
     */
    protected $first;
}

现在,app/console doctrine:schema:update --dump-sql的问题是只检测(默认连接)中的模式更改。如果我将默认连接设置为db2,它将只输出与db2.tables相关的sql。

我已经与app/console doctrine:mapping:info检查过了,所有实体类都在映射。

这是理论/符号的限制,还是我需要调整我的配置?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2012-12-26 02:04:05

每个实体管理器只能有一个连接。将默认的实体管理器拆分为两个。app/console doctrine:schema:update采用一个可选参数(em)来指定正在使用的实体管理器。你得运行两次:

代码语言:javascript
复制
app/console doctrine:schema:update --dump-sql em="default"
app/console doctrine:schema:update --dump-sql em="my_second_em"

还有一篇短文(如何使用多个实体管理器和连接)在Symfony2食谱中值得一读。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14034943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档