php - Doctrine 迁移表整理

标签 php symfony doctrine-orm doctrine

试图找到一种方法来以编程方式创建具有特定排序规则的表,但似乎无法找到正确执行此操作的方法。我正在使用 "doctrine/doctrine-migrations-bundle": "2.1.*@dev" 和 Symfony 2.3,

我在 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

当我运行 doctrine:database:create 工具时,它使用 LATIN1 字符集和 latin1_swedish_ci 作为默认排序规则创建数据库。 然后我运行迁移,所有表都是 utf8_general_ci

查看了 $schema->createTable() 函数,但找不到将我需要的排序规则传递给它的方法。这里的正确解决方法是什么?

最佳答案

您可以设置 default_table_options 连接选项来实现此目的: 在 symfony 中,这是通过以下方式完成的:

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

对于那些希望在简单的 Doctrine 中做到这一点的人来说,这转化为 Doctrine 连接选项 defaultDatabaseOptions,并与您的数据库凭据等一起传递给实体管理器:

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

关于php - Doctrine 迁移表整理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30185603/

相关文章:

php - 我应该在哪里使用数据库以及在 mysql 中的什么地方使用表?

php - 如何检查连接表中是否存在行 - MySQL

php - 表单提交期间在链配置的命名空间中找不到类 'Symfony\Component\Form\Form'

php - 如何使用 symfony2 学说查询生成器选择不同的查询?

用于生成 SQL 的 PHP 库

php - 在 ApiPlatform 中禁用输入对象的自动验证

php - Symfony2 & Doctrine : Create custom SQL-Query

symfony - 在 DBAL 和 session 处理程序 Symfony2 之间共享数据库连接

php - Doctrine 2 自定义 ObjectMultiCheckbox 值

带有变量的 PHP ORDER BY