SQLSTATE : Общая ошибка: 1005 Не удается создать таблицу – Laravel 4

Я получаю эту ошибку, когда выполняю миграцию php-artisan. Что-то не так в моих файлах миграции? Или возможно, мои модели ошибочно закодированы? Но миграция должна работать, даже в моделях что-то не так?

[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'); } } 

Модель Gig

 <?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'); } } 

Сначала вы должны создать таблицу, а затем создать внешние ключи:

 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'); }); 

И таблица ваших bands должна мигрировать сначала, так как gigs ссылаются на нее.

Хотя это не относится к OP, другие могут иметь эту проблему:

Из нижней части документа Laravel Schema :

Примечание. При создании внешнего ключа, который ссылается на добавочное целое число, не забудьте всегда сделать столбец внешнего ключа неподписанным.

Вы можете сделать это через $table->integer('user_id')->unsigned(); при создании таблицы в файле миграции.

Мне потребовалось несколько минут, чтобы понять, что происходит.

Для тех, кому другие ответы не помогают, такая же ошибка возникает и при попытке использовать действие 'SET_NULL' для столбца с недействительными значениями.

Как сказал Андрей , сделав ссылку на таблицу следующим образом:

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

Он должен работать.

Это, по-видимому, является общей проблемой внешнего ключа. Для меня я получил его, когда я переключил аргументы в references и методах. Я имел:

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

вместо:

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