在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

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

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

其他提示

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

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

您需要先添加'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');
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top