将主键更改为自动增量

时间:2014-08-23 07:15:27

标签: mysql sql symfony doctrine-orm

我在Doctrine 2 / Sf2中更新了我的数据库模式,并在我的数据库中添加了一些新表。一切都很顺利,但是当我想创建应用程序的管理员端时,我意识到我需要一些ID为AUTO_INCREMENT。

然后,我想改变我的架构。从此。

X\XBundle\Entity\Currency:
type: entity
table: currencies
repositoryClass: CurrencyRepository
id:
    id:
        type: integer
fields:
    name:
        type: string
        length: 255
    slug:
        type: string
        length: 64
manyToMany:
    brokers:
        targetEntity: X\XBundle\Entity\Broker
        mappedBy: currencies

对此:

X\XBundle\Entity\Currency:
type: entity
table: currencies
repositoryClass: CurrencyRepository
id:
    id:
        type: integer
        generator: { strategy: AUTO } # I changed on this row!
fields:
    name:
        type: string
        length: 255
    slug:
        type: string
        length: 64
manyToMany:
    brokers:
        targetEntity: X\XBundle\Entity\Broker
        mappedBy: currencies

然后我尝试在CLI中运行php app/console doctrine:schema:update --force并收到此消息:

 SQLSTATE[HY000]: General error: 1833 Cannot change column 'id': used in a foreign key constraint 'FK_706E39538248176' of table 'forexcbc.broker_currencies'

我现在尝试了一切。我手动删除了外键并重新运行脚本,但没有工作。我删除了两个表之间的关系,没有用。有趣的是,表格中没有任何内容。

My Broker架构看起来像这样(我不知道这是否有任何形式的帮助)

X\XBundle\Entity\Broker:
type: entity
table: brokers
repositoryClass: BrokerRepository
id:
    id:
        type: integer
        generator: { strategy: AUTO }
fields:
    name:
        type: string
        length: 255
    slug:
        type: string
        length: 64
oneToMany:
    accountTypes:
        targetEntity: X\XBundle\Entity\AccountType
        mappedBy: broker
        cascade: ["persist"]
manyToMany:
    currencies:
        targetEntity: X\XBundle\Entity\Currency
        inversedBy: brokers
        joinTable:
            name: broker_currencies
            joinColumns:
                broker_id:
                    referencedColumnName: id
            inverseJoinColumns:
                currency_id:
                    referencedColumnName: id

我的问题是,在地球上如何在创建表格后将ID字段设置为自动递增。同样,表格中没有任何内容。

提前感谢您的帮助!

亚当

1 个答案:

答案 0 :(得分:1)

您可以转储要应用的SQL,而不是将更新应用于数据库:

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

打开一个mysql shell,选择你的数据库并首先禁用外键检查:

SET FOREIGN_KEY_CHECKS = 0;

然后在shell中执行生成的SQL查询。

完成后,关闭shell,再次运行doctrine:schema:update命令,看看是否一切都成功。