【问题标题】:How to remove an entity class in a Symfony2 project如何在 Symfony2 项目中删除实体类
【发布时间】:2014-03-21 03:04:14
【问题描述】:

当我们最初设计我们的项目时,我们有几个迄今为止尚未使用的实体(我们不打算在不久的将来实施它们)。因此,我想将它们从我的项目中删除。我会这样进行(所有步骤都是手动执行的):

  1. 从我当前使用的实体中删除所有关系。
  2. 删除doctrime ORM文件src/Resources/config/doctrine
  3. src/Entity中删除类PHP文件
  4. 从数据库中删除表

我想知道的:是否有任何例程(例如控制台命令)可以支持此过程?例如,如果我运行

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

在删除所有关系并删除文件后,我得到删除相应表的 SQL 语句?

【问题讨论】:

  • 看看 DoctrineMigrationsBundle
  • @Paziツ 我找不到任何对我有帮助的东西。你能引用或链接究竟有什么帮助吗?
  • 最好的做法是不使用schema:update,而只依赖迁移类,这样您就可以编写原始sql 以将数据库与当前模型对齐。关键是要以两种方式编写迁移:在您的情况下,将是用于删除表的 up 命令和用于恢复表的 down 命令

标签: php symfony doctrine-orm data-modeling


【解决方案1】:

要删除 symfony 3 中的表,您只需运行迁移,未使用的表将从数据库中删除:

php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate

【讨论】:

    【解决方案2】:

    从代码中删除实体后,您可以使用以下控制台命令删除表:

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

    注意--complete 选项的使用。


    以下是来自doctrine:schema:update 帮助文本的相关部分:

    选项:

    --complete        如果定义,所有与当前元数据无关的数据库资产将被删除。
    [...]

    帮助:

    [...]

    最后,请注意,如果传递了 --complete 选项,此任务将删除当前元数据描述的所有数据库资产(例如表等)。换句话说,如果没有此选项,此任务将保留数据库中存在但未由任何元数据描述的任何“额外”表。

    提示:如果您的数据库包含不应由 ORM 管理的表,则可以使用 DBAL 功能在全局级别向下过滤表和序列:

    $config->setFilterSchemaAssetsExpression($regexp);
    

    【讨论】:

    • 这很有帮助,谢谢!您能否提供指向您引用的文档的链接?我在 Symfony 或 Doctrine 文档中找不到它。
    • 我通过运行php bin/console help doctrine:schema:update找到了这个帮助文本。
    【解决方案3】:

    您删除实体的步骤没问题。

    您不能从 Doctrine 中删除表格,因为 Doctrine 不知道它。看看这个问题:

    Deleting table using Doctrine2 and Symfony2

    【讨论】:

      猜你喜欢
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      • 2012-05-09
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多