Ограничение внешнего ключа в миграции Laravel

В 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 (
))

Я полагаю, проблема в том, что foreigntable не существует, когда MySQL пытается добавить ограничение внешнего ключа в mytable (потому что миграция, которая создает foreigntable будет запущен только после миграции для mytable было закончено).

Как я могу обойти эту проблему?

1 ответ

Решение

На самом деле, я просто нашел ответ сам.

Переместите следующее из миграции на mytable в новую миграцию:

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

Поскольку новая миграция будет запущена после миграции для mytable, а также после миграции для foreigntableобе таблицы будут присутствовать во время добавления ограничений внешнего ключа. Следовательно, это работает.

Другие вопросы по тегам