W Laravel 4, w jaki sposób dodać ograniczenie obce w migracji?
W migracji dla mytable
(które odniesienia foreigntable
):
// add Column
$table
->string( "foreigntable_id", 6 );
// add FK
$table
->foreign( "foreigntable_id" )
->references( "id" )
->on( "foreigntable" );
Błąd:
[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 (
))
Zakładam, że problem polega na tym foreigntable
nie istnieje, gdy MySQL próbuje dodać ograniczenie klucza obcego do mytable
(ponieważ migracja, która tworzy foreigntable
zostanie uruchomiony po migracja dla mytable
została zakończona).
Jak mogę obejść ten problem?
Odpowiedzi:
0 dla odpowiedzi № 1Właściwie to znalazłem odpowiedź sam.
Przenieś następujące elementy z migracji dla mytable
do nowej migracji:
// add FK
$table
->foreign( "foreigntable_id" )
->references( "id" )
->on( "foreigntable" );
Ponieważ nowa migracja zostanie uruchomiona po migracji dla mytable
, a także po migracji do foreigntable
, obie tabele będą obecne w momencie dodania ograniczeń klucza obcego. Dlatego działa.