Ограничение внешнего ключа в миграции 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
обе таблицы будут присутствовать во время добавления ограничений внешнего ключа. Следовательно, это работает.