主义迁移外键

时间:2009-10-25 14:17:41

标签: php migration foreign-keys doctrine

在PHP Doctrine中,是否可以创建一个用于创建表并在该表上创建外键的迁移类? 出于某种原因,我无法获得外键工作......

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')
    }
}

谢谢, 奥菲尔

3 个答案:

答案 0 :(得分:0)

这可能不是一个明确的答案,但我注意到如果您使用CLI从现有架构创建迁移,Doctrine将生成单独的迁移以创建每个表,然后生成最终的单个迁移设置所有的外键关系。

我会尝试将外键创建移动到单独的迁移中,看看是否有效。

答案 1 :(得分: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');
    }
}

答案 2 :(得分:0)

要回答我自己的问题,答案是肯定的。

你必须检查一切是否正常,这意味着列应该是相同的(类型,长度等),并且外键是他自己的表中的唯一键(我不记住,但也许它也应该是第一列。)