0

PHP Doctrine では、テーブルを作成し、そのテーブルに外部キーを作成する 1 つの移行クラスを作成することは可能ですか? 何らかの理由で、外部キーを機能させることができません...

class Migration_001 extends Doctrine_Migration_Base {
    public function up() {
        $this->createTable('table_name', array(...))
        $this->createForeignKey('table_name', 'foreign_key_name', array(...))
    }

    public function down() {
        $this->dropForeignKey('table_name', 'foreign_key_name')
        $this->dropTable('table_name')
    }
}

ありがとう、オフィール

4

3 に答える 3

0

外部キー制約を追加する前に、「foreign_key_name」インデックスを追加する必要があります。それで:

class Migration_001 extends Doctrine_Migration_Base {

    public function up() {

        $this->createTable('table_name', array(...));
        $this->addIndex('table_name', 'foreign_key_name', array(
             'fields'=>array('local_id')
        ));
        $this->createForeignKey('table_name', 'foreign_key_name', array(
             'local' => 'local_id',
             'foreign' => 'id',
             'foreignTable' => 'foreign_table',
             'onDelete'=>'CASCADE'
        ));
    }

    public function down() {
        $this->dropForeignKey('table_name', 'foreign_key_name');
        $this->removeIndex('table_name', 'foreign_key_name');
        $this->dropTable('table_name');
    }
}
于 2010-02-05T00:11:21.950 に答える
0

私自身の質問に答えるには、答えはイエスです。

ただし、すべてが順番に並んでいることを確認する必要があります。つまり、列が同一 (型、長さなど) である必要があり、外部キーが自分のテーブル内の一意のキーであることも確認する必要があります (覚えていませんが、おそらくまた、最初の列にする必要があります)。

于 2010-02-05T13:21:21.647 に答える
0

これは決定的な答えではないかもしれませんが、CLI を使用して既存のスキーマから移行を作成する場合、Doctrine は個別の移行を生成して各テーブルを作成し、すべての外部を設定する最終的な単一の移行を生成することに気付きました重要な関係。

外部キーの作成を別の移行に移動して、それが機能するかどうかを確認します。

于 2009-11-17T22:37:26.273 に答える