2015-05-12 3 views
3

Пытается найти способ программно создать таблицы с определенной сортировкой, но не может найти способ, как это сделать должным образом. Я использую "доктрины/доктрину-миграцию-расслоение": "2.1.*@dev" и Symfony 2.3,Сопоставление таблицы миграций Doctrine

я поставил в моем 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: MyNameSpace\Migrations 
    table_name: migrations 
    name: Application Migrations 

Это создает база данных с кодировкой LATIN1 и latin1_swedish_ci по умолчанию, когда я запускаю инструмент doctrine:database:create. Тогда я бег моих миграций, и все столы utf8_general_ci

Посмотрел в функцию $schema->createTable(), но не могу найти способ, чтобы пройти сверку Мне нужно это. Какое уместное обходное решение здесь?

ответ

2

Ну, это вроде уродливо, но единственный способ, который я нашел, - это создать после всех таблиц другой набор миграций, которые изменили таблицу и преобразовали кодировку. миграция 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"); 
    } 
2

вы можете установить опцию default_table_options соединения для достижения этой цели: в Symfony это делается через:

doctrine: 
    dbal: 
     default_table_options: 
      charset: latin1 
      collate: latin1_general_ci 

для тех, кто хочет сделать это в простом doctrine, это переводит на параметр подключения доктрины defaultDatabaseOptions и передается диспетчеру сущности вместе с вашими учетными данными базы данных и т. д .:

[ 
    ... 
    'driver' => ... 
    'user' => ... 
    ... 
    'defaultDatabaseOptions' => [ 
     'charset' => 'latin1', 
     'collate' => 'latin1_general_ci' 
    ] 
] 
Смежные вопросы