学说没有检测到一个实体管理器和多个数据库架构更改(Doctrine not detecting sc

2019-08-04 16:38发布

使用的Symfony-2.1和学说-2.3。 我有多个数据库和需要做跨数据库连接,所以我遵循的建议:

  • 在Doctrine2和Zend框架的多个数据库连接
  • 使用具有多个实体管理的关系

并建立多个连接和一个实体管理器。 下面是app/config/config.yml

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

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

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仅检测(默认连接)架构更改db1.tables 。 如果我设置的默认连接db2只会输出SQL相关db2.tables

我检查与app/console doctrine:mapping:info和所有实体类都被映射。

这是教义/ Symfony的的限制还是我需要调整一下我的配置? 谢谢。

Answer 1:

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

app/console doctrine:schema:update --dump-sql em="default"
app/console doctrine:schema:update --dump-sql em="my_second_em"

还有一个简短的文章( 如何与多个实体管理器和连接工作 )在Symfony2的食谱这是值得一读。



文章来源: Doctrine not detecting schema changes with one entity manager and multiple databases