Wie lösche ich alle Zeilen in einer Tabelle mit Eloquent?
Meine Vermutung war, verwenden Sie die folgende syntax:
MyModel::all()->delete();
Aber das hat nicht funktioniert. Ich bin sicher, es ist super einfach, aber ich habe gesucht für eine Dokumentation über das Thema und kann es nicht finden!
InformationsquelleAutor der Frage Pete | 2013-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Grund
MyModel::all()->delete()
nicht funktionieren wird, weilall()
tatsächlich löst die Abfrage aus und gibt eine collection zurück, Beredte Objekte.Können Sie Gebrauch machen von der truncate-Methode, das funktioniert für Laravel 4 und 5:
Dass löscht alle Zeilen aus der Tabelle ohne Anmeldung einzelne Zeile gelöscht werden.
InformationsquelleAutor der Antwort bilalq
Können Sie
Model::truncate()
wenn Sie deaktivierenforeign_key_checks
(ich nehme an, Sie verwenden MySQL).InformationsquelleAutor der Antwort Fortex
Laravel 5.2+ Lösung.
Schnappen zugrunde liegenden builder mit Tabellenname und tun, was auch immer.
Nicht aufgeräumter als das.
Laravel 5.6 Lösung
InformationsquelleAutor der Antwort Yauheni Prakopchyk
Ich habe gesehen, beide Methoden verwendet worden in der seed-Dateien.
Obwohl Sie nicht verwenden können, die ersten, wenn Sie festlegen möchten Fremdschlüssel.
So könnte es eine gute Idee, verwenden Sie die zweite.
InformationsquelleAutor der Antwort giannis christofakis
Gibt es einen indirekten Weg:
Beispiel:
Laravel query builder Informationen: https://laravel.com/docs/5.4/queries
InformationsquelleAutor der Antwort Rejaul
Wollte ich hinzufügen, eine weitere option für diejenigen, die immer auf diesen thread über Google. Ich brauchte, um dies zu erreichen, wollte sich aber zu behalten mein auto-Inkrement-Wert, die
truncate()
setzt. Ich habe auch nicht verwenden wollenDB::
nichts, weil ich wollte, um zu arbeiten direkt aus der Modell-Objekt. So ging ich also mit diesem:Offensichtlich wird die Spalte haben tatsächlich existiert, aber in einer standard -, out-of-the-box Beredtes Modell, das
id
Spalte existiert und ist nie null. Ich weiß nicht, ob dies ist die beste Wahl, aber es funktioniert für meine Zwecke.InformationsquelleAutor der Antwort lookitsatravis
Den besten Weg für die Durchführung dieser operation in
Laravel 3
scheint die Nutzung derFluent
Schnittstelle zum abschneiden der Tabelle, wie unten gezeigtInformationsquelleAutor der Antwort Pete
War ich nicht in der Lage zu verwenden
Model::truncate()
wie es wäre, ein Fehler:Und leider
Model::delete()
funktioniert nicht (zumindest in Laravel 5.0):Aber das funktioniert:
Soft-löschen Sie alle Zeilen, wenn Sie soft-delete set up. Um vollständig zu löschen Sie alle Zeilen, einschließlich soft-gelöscht, diejenigen, die Sie ändern können:
InformationsquelleAutor der Antwort Dave James Miller
Tun können, eine foreachSchleife zu..
InformationsquelleAutor der Antwort Sam Solomon
In einer ähnlichen Art und Weise wie Travis vignon Antwort, ich erforderlichen Daten aus dem eloquenten Modell, und wenn die Bedingungen korrekt waren, ich musste entweder löschen oder eine Aktualisierung des Modells. Gewickelt ich immer die minimum-und maximum-ich würde zurückgegebenen Feld durch meine Abfrage (bei einem anderen Feld wurde Hinzugefügt, um die Tabelle genügen würde meine Auswahl-Kriterien) zusammen mit der ursprünglichen Auswahlkriterien aktualisieren Sie die Felder, die über einen raw-SQL-Abfrage (im Gegensatz zu einem beredten Abfrage pro Objekt in der Sammlung).
Ich weiß, die Verwendung von raw-SQL verletzt laravels schöne code-Philosophie, aber itd schwer zu Magen möglicherweise Hunderte von Anfragen statt.
InformationsquelleAutor der Antwort Sidney
Lösung, die arbeitet mit Lumen 5.5 mit Fremdschlüssel-Einschränkungen :
InformationsquelleAutor der Antwort Alain Berrier