数据已存在时的唯一索引

时间:2015-03-01 10:34:39

标签: php symfony doctrine migration unique

当我想添加新的列映射ONE TO ONE时,我遇到了麻烦。它在该列上创建唯一索引,并且在执行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)');

在这种情况下我该怎么做?

1 个答案:

答案 0 :(得分:2)

我认为问题可能来自settings_id列上的NOT NULL约束。

你必须:

  1. 添加没有NOT NULL约束的外键(settings_id)
  2. 使用值
  3. 更新所有外国字段(settings_id)
  4. 使用NOT NULL约束更改外键(settings_id)