使用 Doctrine 迁移重命名表名称

问题描述 投票:0回答:2

我几乎到处都找过了,但什么也没找到。

是否有命令或过程可以更改表的名称(因此在学说注释内)而不丢失数据?

基本上,会产生类似的东西

RENAME TABLE old_table TO new_table;

ALTER TABLE old_table RENAME new_table;

MySQL 命令取自此处

我应该用

doctrine:migrations:generate
手动编写迁移文件吗?

symfony doctrine-orm doctrine-migrations
2个回答
19
投票
  1. 更改给定实体的表名称。

    /** @Entity @Table(name="new_table_name") */
    class MyEntity { ... }
    
  2. 生成新的迁移。

  3. 删除
    up()
    down()
    方法的内容,并将其替换为自定义 SQL (
    ALTER TABLE ... RENAME TO ...
    )。

请记住,迁移生成器是一种实用/半自动工具。


0
投票

我发现最好的方法是使用两步/两次迁移方法。第一次迁移仅重命名表,第二次迁移则负责重命名部分,例如FK。

我采取的步骤:

  1. 重命名 PHP 实体,将
    App\Entity\OldName
    更改为
    App\Entity\NewName
  2. 创建一个新的迁移,例如
    symfony console make:migration
  3. up()
    替换为
    ALTER TABLE old_name RENAME new_name;
    ,将
    down()
    替换为
    ALTER TABLE new_name RENAME old_name;
    。换句话说,此迁移仅重命名表本身,没有FK、索引等
  4. 运行迁移,例如
    symfony console doctrine:migrations:migrate -n
  5. 再次创建一个新的迁移
    symfony console make:migration
    。此迁移生成的代码处理所有 FK、列重命名(如果您在 PHP 实体中进行了任何操作)、索引等。
  6. 也运行此迁移,例如
    symfony console doctrine:migrations:migrate -n
© www.soinside.com 2019 - 2024. All rights reserved.