当我想添加映射为"一对一"的新列时,遇到了麻烦。它在该列上创建唯一索引,在执行SQL时,它显然会失败,因为该表已经包含行。删除开发数据库中的数据不是问题,但它将在生产数据库中。
SQL是这样的:
$this->addSql('CREATE TABLE program_settings (id INT AUTO_INCREMENT NOT NULL, booking_cancel VARCHAR(155) NOT NULL, booking_ahead VARCHAR(155) NOT NULL, created_at DATETIME NOT NULL, modified_at DATETIME NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
$this->addSql('ALTER TABLE program ADD settings_id INT NOT NULL AFTER studio_id');
$this->addSql('ALTER TABLE program ADD CONSTRAINT FK_92ED778459949888 FOREIGN KEY (settings_id) REFERENCES program_settings (id)');
$this->addSql('CREATE UNIQUE INDEX UNIQ_92ED778459949888 ON program (settings_id)');
那样的话我该怎么办?
我认为问题可能来自settings_id列上的NOT NULL约束。
你必须:
- 添加没有NOT NULL约束的外键(settings_id)
- 使用值更新所有外部字段(settings_id)
- 使用NOT NULL约束更改外键(settings_id)