2017-09-11 18 views
1

移行時に「errno:150」外部キー制約が正しく形成されませんでした。LARAVEL 5.5外部キー制約が正しく形成されていません '

私は3つの外部キーを必要とするテーブルを持っている:

Schema::create('ads', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('prodname'); 
     $table->string('mfrname'); 
     $table->decimal('priceam'); 
     $table->string('imagenametxt',500); 
     $table->string('specstxt',500); 
     $table->string('otherinfotxt',500); 
     $table->decimal('avalableqty'); 
     $table->binary('validyn'); 
     $table->binary('checkyn'); 
     $table->binary('updatedyn'); 
     $table->integer('selleridno')->unsigned(); 
     $table->integer('catidno')->unsigned(); 
     $table->integer('subcatidno')->unsigned(); 
     $table->timestamps(); 

    }); 

    Schema::table('ads', function(Blueprint $table){ 
     $table->foreign('selleridno')->references('id')->on('users'); 
     $table->foreign('catidno')->references('id')->on('categories'); 
     $table->foreign('subcatidno')->references('id')-> 
     on('subcategories'); 
    }); 

ユーザー、カテゴリとサブカテゴリの表は、この表の前に作成されます。 selleridnoとcatidnoは正常に作成されましたが、subcatidnoの外部キーを作成する際にエラーが発生しました。任意の提案/意見?前もって感謝します。

マイデータベースはMySqlです。

は、念のために、あなたはそれがここのサブカテゴリテーブルを必要とする:

Schema::create('sub_categories', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('subcategorycd'); 
      $table->string('subcategorytxt'); 
      $table->integer('categoryidno')->unsigned(); 
      $table->timestamps(); 

      $table->foreign('categoryidno')->references('id')->on('categories'); 
     }); 
+0

私はあなたが、マイグレーションの実行順序に問題があると思います。親テーブルは、外部キーとして親IDが使用されるテーブルより先に作成される必要があるためです。 –

+1

@SagarGautam私はすでにこの前にこの種の問題に遭遇していたので、私はすでにそれを手配しました。上記のように、外部キーを持つテーブルの前に親テーブルが最初に作成されました。ありがとうございます。 – Punky

+0

@punkyはあなたのテーブル名ですsub_categoriesまたはサブカテゴリを確認してください –

答えて

0

この外部キーは、テーブルの上にあるがsubcategoriesと呼ば

Schema::create('sub_categories', function (Blueprint $table) { 
0

、あなたがサブカテゴリの移行でカテゴリを得るためだけでなく、カテゴリを取得する必要はありませんサブカテゴリを取得します。

selleridnosubcatindoの代わりにuser_idsubcategory_idとしてください。

動作するかどうかを確認してください。

PS:サブカテゴリcreatメソッドでは、広告と同じように別のforeginキーが発行されます。

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

しかし、あなたのテーブルが実際に sub_categoriesと呼ばれている:

Schema::table('subcategory', function(Blueprint $table){ 

    $table->foreign('category')->references('id')-> on('categories'); 
}); 
関連する問題