SQLSTATE[HY000]: General error: 1005 Can ' T create table - Laravel 4
Ich bekomme diese Fehlermeldung, wenn ich php artisan migrate. Gibt es etwas falsch in meinem migration-Dateien? Oder ist es möglich meine Modelle sind falsch codiert? Aber die Migrationen sollten die arbeiten noch, es ist etwas falsch in den Modellen?
[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)
gigs migration
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');
});
}
bands migration
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');
});
}
Modell Band
<?php
class Band extends Eloquent {
protected $primaryKey = 'band_id';
public function gig()
{
return $this->hasOne('Gig', 'band_id', 'band_id');
}
}
Modell 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');
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie zuerst die Tabelle erstellen, dann erstellen Sie die Fremdschlüssel:
Und Ihre
bands
Tabelle zu migrieren erst, seit diegigs
es verweist.Während dies nicht für OP, andere haben dieses Problem:
Sich von der Unterseite des Laravel Schema docs:
Können Sie dies über
$table->integer('user_id')->unsigned();
bei der Erstellung Ihrer Tabelle in der migration-Datei.Brauchte ein paar Minuten um zu realisieren was passiert war.
Für diejenigen, die anderen Antworten nicht helfen, den gleichen Fehler wirft, auch wenn Sie versuchen, verwenden Sie
'SET_NULL'
Aktion auf nicht-null-Spalte.Wie gesagt von Andrew, indem Sie die Referenz auf die Tabelle, wie diese:
Sollte es funktionieren.
für diejenigen, die immer noch dieses Problem, stellen Sie sicher, dass das Feld, das Sie einstellen als Fremdschlüssel ist ein Primärschlüssel oder sollte eindeutig sein, da ein Fremdschlüssel kann nur eine primary-oder unique-Feld.
siehe Beispiel unten
Scheint dies ein Allgemeines foreign key Fehler Problem. Für mich habe ich es, wenn ich schaltete die Argumente in der
references
undon
Methoden. Ich hatte:statt:
Ich gerade behoben dieses problem, indem Sie zeigt auf Laravel, dass das Feld einzigartige mit
unique()
.Beispiel:
Funktionen Tabelle:
Änderte ich in der config/database
'engine' => 'InnoDB',
zu'engine' => null,
und arbeitet