【问题标题】:How can I edit the sql commands of symfony doctrine when updating a schema?更新架构时如何编辑 symfony 学说的 sql 命令?
【发布时间】:2020-06-27 10:46:58
【问题描述】:

当我尝试更新我的数据库架构时出现以下错误:

SQLSTATE[HY000]: General error: 1833 Cannot change column 'IdEcole': used in a foreign key constraint 'appartient_ibfk_2' of table 'tuteure.appartient' 

但是,我没有任何东西可以使 IdEcole AUTO_INCREMENT(在数据库或我的实体中,仅在迁移中。

当我执行以下行 php bin/console doctrine:schema:update --dump-sql 时,我得到以下响应:

ALTER TABLE Ecole CHANGE IdEcole IdEcole INT AUTO_INCREMENT NOT NULL;

那么我该如何编辑这一行来删除它呢?这条线存储在哪里以及它来自哪里?

【问题讨论】:

  • 错误信息很清楚 table 'tuteure.appartient' ** has a **foreign key namend 'appartient_ibfk_2' of ** 引用了列 **表IdEcole的IdEcole
  • 它来自 Doctrine 识别数据库的实际状态与您通过代码配置的状态之间的差异。您如何使用注释配置实体?
  • 但是我没有任何命令可以覆盖 IdEcole 中的约束
  • @El_Vanja 我没有手动配置我的实体,我导入了我现有的 sql 文件
  • 即使它们是生成的,信息也会写入某处。您的实体中是否有注释,或者它是否写在 XML 文件中?无论是哪个,检查您的IdEcole 是否在某处指定了GeneratedValue

标签: php mysql sql symfony symfony4


【解决方案1】:

终于找到问题出在哪里了:

Symfony 的 Doctrine 使用迁移来更新您的代码和数据库。 所以,在我的上一个迁移文件中(在src/Migrations 一个名称类似于VersionNUMBER.php 的文件中)。

我编辑了这个包含两个方法的文件:updown,我只是删除了这一行:

ALTER TABLE Ecole CHANGE IdEcole IdEcole INT AUTO_INCREMENT NOT NULL;

做一个简单的:

php bin/console doctrine:migrations:execute NUMBERVERSION

NUMBERVERSION 是我的号码(migration 文件和类的名称)

之后:

php bin/console doctrine:schema:update

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2014-07-31
    相关资源
    最近更新 更多