我在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字段设置为自动递增。同样,表格中没有任何内容。
提前感谢您的帮助!
亚当
答案 0 :(得分:1)
您可以转储要应用的SQL,而不是将更新应用于数据库:
app/console doctrine:schema:update --dump-sql --complete
打开一个mysql shell,选择你的数据库并首先禁用外键检查:
SET FOREIGN_KEY_CHECKS = 0;
然后在shell中执行生成的SQL查询。
完成后,关闭shell,再次运行doctrine:schema:update
命令,看看是否一切都成功。