Heim > Datenbank > MySQL-Tutorial > Wie behebe ich den Fehler „Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden' in Laravel?

Wie behebe ich den Fehler „Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden' in Laravel?

DDD
Freigeben: 2024-10-25 06:53:02
Original
346 Leute haben es durchsucht

How to Fix the

Behebung des Fehlers „Übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden“ in Laravel

Beim Löschen eines Beitrags, der mit „Gefällt mir“-Angaben verknüpft ist, tritt Folgendes auf Fehler:

SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails
Nach dem Login kopieren

Dieser Fehler deutet auf ein Schemaproblem im Zusammenhang mit Fremdschlüsseleinschränkungen hin.

Problemanalyse

Die Likes-Tabelle hat einen Fremdschlüssel Einschränkung für post_id, die auf die ID-Spalte in der Posts-Tabelle verweist. Wenn Sie versuchen, einen Beitrag zu löschen, ohne zuvor die zugehörigen „Gefällt mir“-Angaben zu löschen, verhindert die Fremdschlüsseleinschränkung für „likes.post_id“ den Vorgang.

Lösung 1: Verwendung von onDelete('cascade')

Um das Problem zu beheben, können Sie die onDelete-Aktion für den Fremdschlüssel „likes.post_id“ in der Likes-Migrationsdatei konfigurieren:

<code class="php">Schema::create('likes', function (Blueprint $table) {
    $table->integer('post_id')->unsigned();
    $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
});</code>
Nach dem Login kopieren

Mit dieser Konfiguration werden beim Löschen eines Beitrags alle zugehörigen „Gefällt mir“-Angaben angezeigt wird automatisch gelöscht, wodurch die Fremdschlüsselverletzung behoben wird.

Lösung 2: Likes explizit löschen

Alternativ können Sie die mit dem Beitrag verknüpften Likes explizit löschen, bevor Sie den Beitrag löschen selbst posten. Dieser Ansatz erfordert das Hinzufügen der folgenden Zeilen zu Ihrer PostController.php:

<code class="php">$post->likes()->delete();
$post->delete();</code>
Nach dem Login kopieren
Nach dem Login kopieren

Beziehungsbasierte Lösung

Wenn zwischen Ihren Modellen eine Beziehung konfiguriert ist, können Sie dies tun Verwenden Sie den folgenden Ansatz, um sowohl den Beitrag als auch die zugehörigen „Gefällt mir“-Angaben in einem einzigen Vorgang zu löschen:

<code class="php">$post->likes()->delete();
$post->delete();</code>
Nach dem Login kopieren
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden' in Laravel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage