2016-05-22 25 views
0

テーブルを作成して外部キーを追加しようとしていますが、外部キーは追加しません。主キーを持っていない一般的なエラー:1005テーブルを作成できません - Laravel 4.2は外部キーを作成できません

public function up() 
    { 
     Schema::create('forms', function(Blueprint $table) 
     { 
      $table->engine = 'InnoDB'; 
      $table->string('id')->nullable(); 
      $table->string('url', 100); 
      $table->string('title', 100); 

      $table->timestamps(); 


     }); 
     Schema::table('forms', function(Blueprint $table) 
     { 
      $table->foreign('id')->references('id')->on('pages'); 

     }); 
    } 

マイテーブルforms

[Illuminate\Database\QueryException] SQLSTATE[HY000]: General error: 1005 Can't create table 'myDB.#sql -4b4_1a5e43' (errno: 150) (SQL: alter tableフォームadd constr aint forms_id_foreign foreign key ( ID ) referencesページ( id`))

私の移行は以下のようになります。私は、このエラーメッセージが表示されました。外部キー参照idpagesテーブルにあるidの列である必要があります。

私はその問題を検索しid列および移行が、まだありません結果に

$table->engine = 'InnoDB';

nullable()を追加しました。

どこが間違っていますか?ありがとう。

答えて

0

EDITED

いくつかのトレーニングの後、私は、問題とどのようにそれを解決するために何を見つけることができました。文字列フィールドsqlとして、インデックス付きの文字列型の外部キーを使用できます。 idフィールドにインデックスを追加してください。

public function up() 
    { 
     Schema::create('forms', function(Blueprint $table) 
     { 
      $table->string('id')->nullable()->index(); 
      $table->string('url', 100); 
      $table->string('title', 100); 
      $table->timestamps(); 

      $table->foreign('id') 
      ->references('id') 
      ->on('pages'); 

     }); 
    } 

同じ方法でインデックスを作成します。私はあなたにマイグレーションファイルがないと言った。 dbに移動し、インデックスidフィールドに追加してください。その後、上記の移行を実行します。テストされ、正常に動作します。ページの移行ファイルを作成すると、このようなID列が作成されます。

Schema::create('pages', function(Blueprint $table) 
    { 
     $table->string('id')->nullable()->index(); 
    ......... 
+0

ページテーブルは存在しません。しかし今、 'forms'テーブルを作成する必要があります。' forms'テーブルに似た2つのテーブルがあり、同じカラム構造を持つべきであるため、このカラム名は 'id'でなければなりません。 id' –

+0

@mistery_girl両方のページで質問を編集して移行を行うことはできますか?私は答えを – aimme

+0

更新しました。私の質問では、 'forms'テーブルのための移行を追加しましたが、' pages'テーブルのための移行はありません。プロジェクトが開始されたときに移行せずに作成されました。今作成する方法がわかりません。 –

関連する問題