在Laravel 4中,如何在迁移中添加外键约束?
在mytable
(引用foreigntable
)的迁移中:
// add Column
$table
->string( 'foreigntable_id', 6 );
// add FK
$table
->foreign( 'foreigntable_id' )
->references( 'id' )
->on( 'foreigntable' );
错误:
[Exception]
SQLSTATE[HY000]: General error: 1005 Can't create table 'mydb.#sql-1a24_2
1a' (errno: 150) (SQL: alter table `mytable` add constraint
mytable_foreigntable_id_foreign foreign key (`foreigntable_id`) references
`foreigntable` (`id`)) (Bindings: array (
))
我认为当MySQL尝试将外键约束添加到foreigntable
时,问题是mytable
不存在(因为创建foreigntable
的迁移只会运行在完成mytable
的迁移之后。
如何解决这个问题?
答案 0 :(得分:0)
实际上,我自己就找到了答案。
将以下内容从mytable
的迁移移至新迁移:
// add FK
$table
->foreign( 'foreigntable_id' )
->references( 'id' )
->on( 'foreigntable' );
由于新迁移将在mytable
的迁移之后以及foreigntable
的迁移之后运行,因此在添加外键约束时将存在两个表。因此它有效。