SYMFONY 6 - DOCTRINE:映射并仅从现有数据库中导入一些 table

SYMFONY 6 - DOCTRINE : mapping and import only some table from an existing databse

我实际上是想将现有数据库映射并导入到 symfony 6 项目中。

我知道我们可以使用这个命令来做到这一点:

php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity

但是,这个数据库很大,有很多表。我一个都不想要。

你知道“select”我想映射的表格的方法吗?我知道我不想以“_”或“inv_”开头的表格。也许有一种方法可以有一个“where”子句?

doctrine:mapping:import 中有一个 --filer= 选项,但我认为这不是您要找的。

如果您将代码库迁移到 symfony 并且以前没有使用过 doctrine 和 doctrineORM - 重新开始并自己完成所有操作会容易得多。是的,这很乏味,尤其是对于庞大的数据库,但您最终会得到“更干净”的实体,在此阶段您可以决定忽略哪些表。

但如果您仍想尝试以某种方式“导入”,请考虑以下步骤:

  1. 在您的本地开发环境中,创建一个您的数据库的副本。只是没有数据的模式。所以你拥有所有表格,但它们是空的(how to with mysqldump 不要忘记使用 --no-data
  2. 删除您不想要的所有其他表
  3. 重命名一些,如果您认为他们的名字不符合学说的命名约定。
  4. 切换到 .env 中的 copy-database(更改 DATABASE_URL 中的数据库名称)

现在尝试使用 doctrine:mapping:import 再次导入。您可能需要通过重复步骤 2) 和 3) 来调整一些表格,然后再次尝试导入。

如果导入成功,并且您有一堆实体,现在是无聊乏味的部分。您必须手动检查src/Entity中的所有类。

根据您的数据库(mysql、postgreSQL、sqlite 等),并非所有 column-types 都是您想要的。

此外,大多数many-to-one/one-to-many关系和全部many-to-manyjunction tables will be probably converted to standalone Entities like src\CategoryToProduct.php - which isn't right. So you have to delete them and recreate your relations by hand