2016-06-24 5 views
0

Diese Frage already been asked many times hat, wie ich alle durch die Antworten ging, aber keiner löst den Fehler Ich erhalte.Laravel 5.2 - Integrität Einschränkungsverletzung: 1452 Kann nicht hinzugefügt werden oder ein Kind Zeile aktualisieren: ein Fremdschlüssel nicht

Ich verwende Laravel 5.2

Ich habe 2 Tische - Kleinanzeigen und Kategorien. Wenn ich eine Anzeige erstellen möchten, erhalte ich die Fehlermeldung:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (myclassified . classifieds , CONSTRAINT classifieds_category_id_foreign FOREIGN KEY (category_id) REFERENCES categories (id))

Migration Dateien wie folgt definiert:

für classifieds Tabelle:

public function up() 
{ 
    Schema::create('classifieds', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('title'); 
     $table->string('description'); 
     $table->string('price'); 
     $table->timestamps(); 
    }); 
} 

public function down() 
{ 
    Schema::drop('classifieds'); 
} 

für categories Tabelle:

public function up() 
{ 
    Schema::create('categories', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->timestamps(); 
    }); 
} 

public function down() 
{ 
    Schema::drop('categories'); 
} 

und den Fremdschlüssel hinzufügen,

public function up() 
{ 
    Schema::table('classifieds', function(Blueprint $table) { 
     $table->integer('category_id')->unsigned(); 
     $table->foreign('category_id')->references('id')->on('categories'); 
    }); 
} 

public function down() 
{ 
    Schema::table('classifieds', function(Blueprint $table) { 
     $table->dropForeign('classifieds_category_id_foreign'); 
    }); 
} 

Die Modelle sind:

Classified Modell:

class Classified extends Model 
{ 
    protected $table = 'classifieds'; 

    protected $fillable = ['title', 'category_id', 'description', 'price']; 

    protected $hidden = []; 

    public function category(){ 
     return $this->belongsTo('App\Category'); 

    } 
} 

und das Category Modell:

class Category extends Model 
{ 
    protected $table = 'categories'; 
    protected $fillable = ['name']; 

    protected $hidden = []; 

    public function classifieds(){ 
     return $this->hasMany('App\Classified'); 
    } 
} 

und der Speicher-Methode in der Steuerung wie folgt definiert ist:

public function store(Request $request) 
{ 
    $title = $request->input('title'); 
    $category_id = $request->input('category_id'); 
    $description = $request->input('description'); 
    $price = $request->input('price'); 

    Classified::create([ 
      'title' => $this->title, 
      'category_id' => $this->category_id, 
      'description' => $this->description, 
      'price' => $this->price 
    ]); 

    return \Redirect::route('classifieds.index') 
     ->with('message', 'Ad created'); 
} 

Was ist mein Fehler bei der Einrichtung der Datenbank?

Antwort

0

Dies geschieht, wenn Sie versuchen, Classified zu speichern und den Fremdschlüssel mit einer ID der Kategorie zuweisen, die noch nicht in Category Tabelle vorhanden ist.

Wenn Sie die ausländischen ID noch nicht haben, lass es einfach null sein und sicherstellen, dass Sie diese auf die Migration zu tun Nullwerte zu ermöglichen;

public function up() 
{ 
    Schema::table('classifieds', function(Blueprint $table) { 
     $table->integer('category_id')->unsigned(); 
     $table->foreign('category_id')->references('id')->on('categories')->onDelete('set null'); 
    }); 
} 

public function down() 
{ 
    Schema::table('classifieds', function(Blueprint $table) { 
     $table->dropForeign('classifieds_category_id_foreign'); 
    }); 
} 
+0

Hallo. Ich erhalte immer noch den Fehler 'Integrity constraint violation': SQLSTATE [23000]: Integritätseinschränkungsverletzung: 1452 Hinzufügen oder Aktualisieren einer untergeordneten Zeile nicht möglich: Eine Fremdschlüsseleinschränkung schlägt fehl ('myclassified'.classifieds', CONSTRAINT' classifieds_category_id_foreign' FOREIGN) KEY ('category_id') REFERENCES' categories' ('id') ON DELETE SET NULL) – byteseeker

+0

Haben Sie die Migration erneut ausgeführt? – geckob

+0

Ja. Ich habe den Befehl 'php artisan migrate: refresh' ausgeführt – byteseeker

Verwandte Themen