Heim  >  Artikel  >  Datenbank  >  Wie behebt man den Fehler „Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl“ in Laravel?

Wie behebt man den Fehler „Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl“ in Laravel?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-25 11:37:02682Durchsuche

How to Solve

Laravel-Fehler: „Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl“

In Laravel kann beim Versuch, einen Beitrag zu löschen, ein interessanter Fehler auftreten das hat damit verbundene Likes. Die Fehlermeldung lautet:

"SQLSTATE[23000]: Verletzung der Integritätsbeschränkung: 1451 Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden: Eine Fremdschlüsselbeschränkung schlägt fehl (eliapi8.likes, CONSTRAINT likes_post_id_foreign FOREIGN KEY (post_id) REFERENCES posts ( id))"

Analyse des Schemas

Bei der Untersuchung des Schemas wird deutlich, dass eine Fremdschlüsseleinschränkung für das post_id-Feld der Likes-Tabelle besteht. Diese Einschränkung verhindert das Löschen eines Beitragsdatensatzes, wenn ähnliche Datensätze vorhanden sind.

Vorgeschlagene Lösungen

Lösung 1: Verwenden Sie onDelete('cascade')

Die Einführung von onDelete('cascade') in der Migrationsdatei der Likes-Tabelle bietet eine Lösung. Durch die Verwendung dieser Anweisung werden beim Löschen eines Beitragsdatensatzes alle entsprechenden Like-Datensätze automatisch entfernt:

Schema::create('likes', function (Blueprint $table) {
    $table->integer('post_id')->unsigned();
    $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
});

Lösung 2: Modellbeziehungen nutzen

Wenn der Beitrag Wenn das Modell eine Beziehung zum Like-Modell aufrechterhält, kann der folgende Ansatz verwendet werden:

  1. Rufen Sie die zugehörigen Likes mit $post->likes()->get() ab.
  2. Löschen Sie die abgerufenen Likes mit $post->likes()->delete().
  3. Löschen Sie schließlich den Beitrag selbst mit $post->delete().

Durch die Übernahme einer dieser Lösungen kann der problematische Fehler behoben werden, sodass Beiträge unabhängig von ihrem Like-Status gelöscht werden können.

Das obige ist der detaillierte Inhalt vonWie behebt man den Fehler „Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl“ in Laravel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn