在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')
}
}
谢谢, 奥菲尔
答案 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)
要回答我自己的问题,答案是肯定的。
你必须检查一切是否正常,这意味着列应该是相同的(类型,长度等),并且外键是他自己的表中的唯一键(我不记住,但也许它也应该是第一列。)