0

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

谢谢, 奥菲尔

4

3 回答 3

0

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

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

于 2009-11-17T22:37:26.273 回答
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 回答