如何在Symfony 3 / Doctrine中重命名表?

时间:2017-09-01 13:00:00

标签: php mysql symfony doctrine-orm

我想将表从order更改为shop_order。首先,我在phpmyadmin中更改表名。

此外我猜想,改变注释就足够了:

/**
 * Order
 *
 * @ORM\Table(name="shop_order")
 * @ORM\Entity
 */
class Order { ...

但是在跑步时

php bin/console doctrine:schema:update --dump-sql

它尝试再次创建表:

CREATE TABLE `order` (id INT AUTO_INCREMENT NOT NULL ...

我还需要更改其他文件吗?

3 个答案:

答案 0 :(得分:3)

尝试使用force,如下所示:

php bin/console doctrine:schema:update --force --dump-sql

请删除缓存

如果它不起作用我建议你使用迁移,因为似乎教义不能识别表名的变化:

  • 生成新的迁移。
  • 删除up()和down()方法的内容,并将其替换为自定义SQL(ALTER TABLE ... RENAME TO ...)。

Migration docs

答案 1 :(得分:3)

清除缓存并尝试再次使用phpMyAdmin更改表名。一旦再次order,则使用doctrine命令:

php bin/console doctrine:schema:update --dump-sql

如果您希望Doctrine执行更改,请同时添加--force

同时检查你的Doctrine配置,可能就是在其他地方缓存元数据(例如Memcache)。您可能还需要清除它。

Doctrine缓存三个级别:查询缓存,元数据缓存和结果缓存。您可能需要查看元数据。

doctrine:
    orm:
        auto_mapping: true
        # each caching driver type defines its own config options
        metadata_cache_driver: apc
        result_cache_driver:
            type: memcache
            host: localhost
            port: 11211
            instance_class: Memcache
        # the 'service' type requires to define the 'id' option too
        query_cache_driver:
            type: service
            id: my_doctrine_common_cache_service

所以,如果你的例子设置为Memcache,那么你也必须重置Memcache。

查看文档here

答案 2 :(得分:0)

只需使用数据库管理工具更改名称,相应地更改实体中的名称,清除缓存,您就可以了 - doctrine:schema:update --dump-sql然后不会导出任何更改。