Laravel迁移中的外键约束

时间:2013-09-06 11:00:26

标签: mysql foreign-keys laravel laravel-4

在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的迁移之后。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

实际上,我自己就找到了答案。

将以下内容从mytable的迁移移至新迁移:

// add FK
$table
    ->foreign( 'foreigntable_id' )
    ->references( 'id' )
    ->on( 'foreigntable' );

由于新迁移将在mytable的迁移之后以及foreigntable的迁移之后运行,因此在添加外键约束时将存在两个表。因此它有效。