学说迁移表分解



试图找到一种通过某些融合来编程创建表的方法,但似乎无法找到正确的方法。我正在使用"学说/学说移民":" 2.1。

我在我的config.yml中设置:

# Doctrine Configuration
doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  LATIN1
    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        entity_managers:
                    default:
                        auto_mapping: true
doctrine_migrations:
    dir_name: %kernel.root_dir%/../src/CF/EscritorioBundle/Migrations
    namespace: MyNameSpaceMigrations
    table_name: migrations
    name: Application Migrations

当我运行doctrine:database:create工具时,它将使用Latin1 Charset和Latin1 Charset和Latin1_Swedish_Ci创建数据库。然后我运行迁移,所有表都是utf8_general_ci

查看了$schema->createTable()函数,但找不到通过我需要的整理的方法。这里的适当解决方法是什么?

您可以设置Default_table_options Connection选项以实现这一目标:在Symfony中,这是通过:

完成的
doctrine:
    dbal:
        default_table_options:
            charset: latin1
            collate: latin1_general_ci

对于那些希望在普通学说中进行的人,这将转化为Doctrine Connection选项defaultDatabaseOptions,并将其传递给Entity Manager以及您的数据库凭据等:

[
    ...
    'driver' => ...
    'user' => ...
    ...
    'defaultTableOptions' => [
         'charset' => 'latin1',
         'collate' => 'latin1_general_ci'
    ]
]

好吧,那很丑陋,但是我发现的唯一方法是在所有桌子毕竟生成另一组迁移,从而改变了表并将其转换为编码。迁移up()down()函数看起来像:

......    
    /**
     * @param Schema $schema
     */
    public function up(Schema $schema)
    {
        // this up() migration is auto-generated, please modify it to your needs
        $this->addSql("ALTER TABLE MyTable CONVERT TO CHARACTER SET LATIN1 COLLATE latin1_general_ci");
    }
    /**
     * @param Schema $schema
     */
    public function down(Schema $schema)
    {
        // this down() migration is auto-generated, please modify it to your needs
        $this->addSql("ALTER TABLE MyTable CONVERT TO CHARACTER SET UTF8 COLLATE utf8_general_ci");
    }

创建新表时,您可以添加表选项。因此,无需使用Alter SQL进行后续迁移。

未测试是否可以在对表的更新中进行。

/**
 * @param Schema $schema
 */
public function up(Schema $schema)
{
    // this up() migration is auto-generated, please modify it to your needs
    $table = $schema->createTable('new_table');
    $table->addOption('charset', 'latin1');
    $table->addOption('collate', 'latin1_general_ci');
    // ....
}

相关内容

  • 没有找到相关文章

最新更新