我几乎到处都找过了,但什么也没找到。
是否有命令或过程可以更改表的名称(因此在学说注释内)而不丢失数据?
基本上,会产生类似的东西
RENAME TABLE old_table TO new_table;
或
ALTER TABLE old_table RENAME new_table;
MySQL 命令取自此处
我应该用
doctrine:migrations:generate
手动编写迁移文件吗?
更改给定实体的表名称。
/** @Entity @Table(name="new_table_name") */
class MyEntity { ... }
生成新的迁移。
up()
和 down()
方法的内容,并将其替换为自定义 SQL (ALTER TABLE ... RENAME TO ...
)。请记住,迁移生成器是一种实用/半自动工具。
我发现最好的方法是使用两步/两次迁移方法。第一次迁移仅重命名表,第二次迁移则负责重命名部分,例如FK。
我采取的步骤:
App\Entity\OldName
更改为 App\Entity\NewName
symfony console make:migration
up()
替换为 ALTER TABLE old_name RENAME new_name;
,将 down()
替换为 ALTER TABLE new_name RENAME old_name;
。换句话说,此迁移仅重命名表本身,没有FK、索引等symfony console doctrine:migrations:migrate -n
symfony console make:migration
。此迁移生成的代码处理所有 FK、列重命名(如果您在 PHP 实体中进行了任何操作)、索引等。symfony console doctrine:migrations:migrate -n