2014-01-08 69 views
8

php artisan migrateを実行するとこのエラーが発生します。マイグレーションファイルに何か問題がありますか?それとも、私のモデルが間違ってコードされている可能性はありますかしかし、マイグレーションはモデルに何か問題があってもうまくいくはずです。SQLSTATE [HY000]:一般的なエラー:1005テーブルを作成できません - Laravel 4

[Exception]                 
    SQLSTATE[HY000]: General error: 1005 Can't create table 'festival_aid.#sql- 
    16643_2033' (errno: 150) (SQL: alter table `gigs` add constraint gigs_band_ 
    id_foreign foreign key (`band_id`) references `bands` (`band_id`) on delete 
    cascade) (Bindings: array (             
)) 

[PDOException]                
    SQLSTATE[HY000]: General error: 1005 Can't create table 'festival_aid.#sql- 
    16643_2033' (errno: 150) 

ライブマイグレーション

public function up() 
    { 
     Schema::create('gigs', function($table) 
     { 
      $table->increments('gig_id'); 

      $table->dateTime('gig_startdate'); 

      $table->integer('band_id')->unsigned(); 
      $table->integer('stage_id')->unsigned(); 

      $table->foreign('band_id') 
       ->references('band_id')->on('bands') 
       ->onDelete('cascade'); 

      $table->foreign('stage_id') 
       ->references('stage_id')->on('stages') 
       ->onDelete('cascade'); 
     }); 

    public function down() 
    { 
     Schema::table('gigs', function($table) 
     { 
      Schema::drop('gigs'); 
      $table->dropForeign('gigs_band_id_foreign'); 
      $table->dropForeign('gigs_stage_id_foreign'); 
     }); 
    } 

バンド移行

public function up() 
    { 
     Schema::create('bands', function($table) 
     { 
      $table->increments('band_id'); 

      $table->string('band_name'); 
      $table->text('band_members'); 
      $table->string('band_genre'); 
      $table->dateTime('band_startdate'); 
     }); 
    } 

    public function down() 
    { 
     Schema::table('bands', function(Blueprint $table) 
     { 
      Schema::drop('bands'); 
     }); 
    } 

モデルバンド

<?php 

class Band extends Eloquent { 

    protected $primaryKey = 'band_id'; 

    public function gig() 
    { 
     return $this->hasOne('Gig', 'band_id', 'band_id'); 
    } 
} 

モデルギグ

<?php 

class Gig extends Eloquent { 
    protected $primaryKey = 'gig_id'; 

    public function gig() 
    { 
     return $this->belongsTo('Band', 'band_id', 'band_id'); 
    } 

    public function stage() 
    { 
     return $this->belongsTo('Stage', 'stage_id', 'stage_id'); 
    } 
} 

答えて

15

あなたはまず外部キーを作成し、テーブルを作成する必要があります。

Schema::create('gigs', function($table) 
{ 
    $table->increments('gig_id'); 

    $table->dateTime('gig_startdate'); 

    $table->integer('band_id')->unsigned(); 
    $table->integer('stage_id')->unsigned(); 
}); 

Schema::table('gigs', function($table) 
{ 
    $table->foreign('band_id') 
     ->references('band_id')->on('bands') 
     ->onDelete('cascade'); 

    $table->foreign('stage_id') 
     ->references('stage_id')->on('stages') 
     ->onDelete('cascade'); 
}); 

そしてgigsはそれを参照しているので、あなたのbands表は、最初に移行する必要があります。

+0

をIこの:)はまだ同じエラーを取得しました。私は自分のモデルで質問を更新しました。 – Gilko

+1

バンドは移行されていますか?それとも何もなかった?ギグがそれを参照しているので、最初にバンドをマイグレーションする必要があります。 –

+0

それはそれでした。私は、移行ファイルの接頭辞を変更しました。 – Gilko

12

これはOPには適用されませんが、他の人がこの問題がある可能性があります:

Laravel Schema docsの底から:

Note: When creating a foreign key that references an incrementing integer, remember to always make the foreign key column unsigned.

あなたのテーブルを作成するときは、移行に$table->integer('user_id')->unsigned();経由でこれを行うことができますファイル。

何が起こっていたかを理解するのに数分かかりました。

+1

これは答えだった、私はこのマジックノートがいかに人気がないのだろうかと思います。 –

2

他の回答者が役に立たない人は、null不可能な列に対して'SET_NULL'アクションを使用しようとすると同じエラーがスローされます。

0

としては、このようなテーブルの参照を行うことでAndrewで言った:それは動作するはずです

$table->integer('user_id')->unsigned(); 

0

これは一般的な外部キーの問題のようです。私にとっては、referencesonの方法で議論を切り替えたときに得ました。私が持っていた:

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

の代わり:

[OK]を
$table->foreign('user_id')->references('id')->on('users'); 
関連する問題