0

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

問題は、foreigntableMySQL が外部キー制約を追加しようとするときに存在しないことだと思いmytableます (作成する移行は、移行が終了したforeigntableにのみ実行されるため)。mytable

どうすればこの問題を回避できますか?

4

1 に答える 1

0

実際、私は自分で答えを見つけました。

以下を移行からmytable新しい移行に移動します。

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

新しい移行は の移行後と の移行後に実行されるためmytableforeigntable外部キー制約が追加された時点で両方のテーブルが存在します。したがって、それは機能します。

于 2013-09-06T11:34:45.643 に答える