2016-12-07 27 views
1

問題があります。私は他のテーブルの他の列を参照する私のテーブルに新しい列を追加したい。私はそのような何か:テーブルに外部キーを持つ列を追加する。

class m161202_153033_dodanie_informacji_o_obsludze_prawnej_do_pozyczki extends CDbMigration 
{ 
    public function safeUp() 
    { 
      $this->execute("ALTER TABLE loan ADD COLUMN administrator int NOT NULL DEFAULT 15 REFERENCES person (id) ON UPDATE CASCADE ON DELETE NO ACTION;"); 
    } 

    public function safeDown() 
    { 
      $this->execute("ALTER TABLE loan DROP COLUMN administrator;"); 
    } 

} 

をしかし、私はこのエラーを持って、この移行を実行しようとすると:

Foreign key violation: 7 DETAIL: Key (administrator)=(15) doesn't appear in table "person"..

私は私のテーブルのカラム「管理者」を吸うが存在しないことを知っています。しかし、私はローンテーブルに新しい列 "管理者"を追加したい。私は人のテーブル、列 "id"から "管理者"の外部キーを作りたがっていました。あなたが私を助けてくれるのですが、何が間違っているのですか?

答えて

0

エラーは、personに行がなく、idが15に等しくないことを意味します。これは、制約が満たされるために必要となります。

あなたはALTER TABLE文で、テーブルを書き換える必要があり、新しい列が値で満たされていることを実行すると15

多くの場合、(ALTER TABLEを新しい列のNULL可能で、デフォルト値なしを作成する方が簡単ですテーブルを書き換えません)、UPDATEを使用して新しい列にデータを入力します。その後、列定義をNOT NULLに変更し、デフォルト値を追加することができます。

+0

を試してみてくださいしかし、そこの行は、それがこのテーブルのPKだ15に等しいidを持つ人であり、このIDを持つ人をイム。そして、このPKは、ローンでFKであると思われる人からです。 – Speedvees

+0

あなたは間違いをしているにちがいありません。エラーメッセージには、 'ALTER TABLE 'が実行された時点で、' person'は 'id'を持っていなかったと疑う余地はありません。15.間違ったデータベースを見ましたか? ifferentスキーマに複数のテーブル 'person 'があ​​りますか? –

0

この

class m161202_153033_dodanie_informacji_o_obsludze_prawnej_do_pozyczki extends CDbMigration 
{ 
    public function safeUp() 
    { 
      $this->execute("INSERT INTO person (id) VALUES (15) ON CONFLICT (id) DO NOTHING;"); 
      $this->execute("ALTER TABLE loan ADD COLUMN administrator int NOT NULL DEFAULT 15 REFERENCES person (id) ON UPDATE CASCADE ON DELETE NO ACTION;"); 
    } 

    public function safeDown() 
    { 
      $this->execute("ALTER TABLE loan DROP COLUMN administrator;"); 
    } 
} 
関連する問題