Wer schon einmal versucht hat, in Shopware 6 aufzuräumen, kennt das Problem: Man klickt eine alte Bestellung im Admin an, drückt „Löschen“ – und nichts passiert, oder der Button fehlt gleich ganz. Wer Shopware 6 Bestellungen löschen möchte, stößt schnell auf eine technische Sperre, die mit Absicht eingebaut wurde, und auf rechtliche Aufbewahrungsfristen, die sich 2025 sogar geändert haben. In diesem Artikel zeigen wir, warum die Löschung oft blockiert ist, welche Bordmittel (Admin-UI und SQL) tatsächlich funktionieren, welche Store-Plugins die Massenlöschung nachrüsten und wo die rechtlichen Grenzen liegen – Stand Shopware 6.7.9.0, PHP 8.4.
- Shopware 6 Bestellungen löschen: Warum die Löschung technisch blockiert sein kann
- 1. Lösung A: Bestellungen mit Shopware-Bordmitteln löschen (Admin & SQL)
- 2. Lösung B: Store-Plugins für die Massenlöschung von Bestellungen
- 3. Rechtliche Grenzen: Aufbewahrungsfristen für Bestellungen und Rechnungen
- 4. Typische Fehlerbilder beim Löschen von Bestellungen
- 5. Häufige Fragen zum Löschen von Bestellungen in Shopware 6
Shopware 6 Bestellungen löschen: Warum die Löschung technisch blockiert sein kann
Der Löschen-Button für Bestellungen ist in der Shopware-6-Administration fest eingebaut – trotzdem lässt er sich nicht immer nutzen. Der Grund liegt nicht in einer Berechtigungseinstellung, sondern in der Datenbankstruktur selbst. Sobald zu einer Bestellung ein Dokument erzeugt wurde – also eine Rechnung, ein Lieferschein oder eine Stornorechnung – greift ein Fremdschlüssel-Constraint zwischen der Tabelle document und der Tabelle order.
In der Ursprungsmigration Migration1536233360Document.php (Verzeichnis V6_3 im Shopware-Core) ist dieser Fremdschlüssel als ON DELETE RESTRICT definiert. Das bedeutet im Klartext: Die Datenbank verweigert das Löschen einer Bestellung aktiv, solange noch ein referenzierendes Dokument existiert. Das ist kein Soft-Hinweis und keine reine Empfehlung aus der Doku, sondern ein harter Constraint auf Datenbankebene.
Wir haben in den Migrationsverzeichnissen von V6_4 bis V6_7 nach einer Änderung dieses Constraints gesucht und keine gefunden – die Dateinamen deuten darauf hin, dass die Regel bis mindestens 6.7.9.0 fortbesteht. Wichtig für die Einordnung: Das haben wir nur über die Migrationsdateinamen im GitHub-Verzeichnis geprüft, nicht per Volltext-Diff oder per Live-Schema-Abgleich auf einem echten 6.7.9.0-System. Wer auf Nummer sicher gehen will, prüft den Constraint vor größeren Aufräumaktionen selbst per SHOW CREATE TABLE document; auf der eigenen Datenbank.
Offiziell dokumentiert ist die Grundregel jedenfalls: Laut Shopware-Dokumentation zur Bestellübersicht lässt sich eine Bestellung im Admin nur löschen, solange kein Dokument dazu existiert. Tabellennamen und Struktur (OrderDefinition, DocumentDefinition) sind laut aktuellem Trunk-Stand unverändert.
1. Lösung A: Bestellungen mit Shopware-Bordmitteln löschen (Admin & SQL)
Löschen über die Administration
Der native Weg führt über Bestellungen → Übersicht. Eine einzelne Bestellung lässt sich per Kontextmenü oder über die Detailansicht löschen, sofern noch kein Dokument erzeugt wurde. In der Praxis betrifft das meist frische Testbestellungen, stornierte Bestellungen ohne ausgestellte Rechnung oder Bestellungen, die nie in den Rechnungsstatus gewechselt sind.
- Kein natives Bulk-Löschen: Mehrere Bestellungen lassen sich über die Listenansicht derzeit nicht in einem Schritt löschen – jede Bestellung muss einzeln geöffnet und gelöscht werden.
- Kein CLI-Kommando vorhanden: Weder in der offiziellen Commands-Referenz des Shopware-Core noch im Verzeichnis
Checkout/Order/Commandexistiert ein Befehl zum Löschen oder Bereinigen alter Bestellungen. Wer Bestellungen automatisiert aufräumen will, muss selbst SQL, ein Plugin oder ein eigenes Skript einsetzen.
Löschen per SQL
Shopware pflegt eine offizielle Seite mit „SQL Tips & Tricks“, die auch Statements zum Löschen von Bestellungen aus den relevanten Tabellen zeigt. Wichtig ist die Einordnung dieser Seite: Shopware selbst weist dort ausdrücklich darauf hin, dass die gezeigten Statements nicht offiziell supportet sind, nur mit entsprechender Datenbank-Expertise eingesetzt werden sollten, vorher ein Backup Pflicht ist – und dass Bestellungen mit Rechnungen bzw. Dokumenten grundsätzlich nicht gelöscht werden sollten.
In Foren kursiert außerdem eine verbreitete Praxis, vor dem direkten Löschen in der order-Tabelle FOREIGN_KEY_CHECKS zu deaktivieren oder mit TRUNCATE statt DELETE zu arbeiten. Das lässt sich weder auf der offiziellen SQL-Tips-Seite noch im Code-Constraint selbst belegen – wir stellen es hier deshalb bewusst nicht als Shopware-Anleitung dar, sondern als das, was es ist: eine in Foren kursierende, nicht offiziell dokumentierte SQL-Praxis, die den eigentlichen Zweck des Constraints (Schutz vor verwaisten Dokumenten) aushebelt und mit entsprechender Vorsicht zu behandeln ist.
- Vor jedem direkten SQL-Eingriff: vollständiges Datenbank-Backup anlegen.
- Reihenfolge beachten: abhängige Zeilen (z. B.
order_line_item,order_delivery,order_transaction) müssen vor oder zusammen mit der eigentlichenorder-Zeile entfernt werden, sonst greift derselbe FK-Schutz wie im Admin.
Ein in mehreren Forenbeiträgen beschriebenes praktisches Problem: Auch wer per SQL direkt in der order-Tabelle löscht, räumt damit nicht automatisch die dazugehörigen Dokument-Dateien im Dateisystem (/files/media) oder verwaiste Einträge in den Tabellen document und media mit auf. Diese können nach einem reinen SQL-Löschvorgang zurückbleiben und sollten separat bereinigt werden.
2. Lösung B: Store-Plugins für die Massenlöschung von Bestellungen
Wer regelmäßig größere Mengen an Bestellungen bereinigen muss – etwa nach einem Shop-Relaunch, bei Testdaten oder bei DSGVO-Löschanfragen – kommt an einer der Bordmittel-Grenzen schnell vorbei. Für diesen Fall gibt es im Shopware Store mehrere kostenpflichtige Erweiterungen. Die folgenden Angaben haben wir am 03.08.2026 direkt auf den jeweiligen Store-Seiten geprüft.
| Plugin | Anbieter | Zweck | Preis | Kompatibilität (Store-Angabe) | Bewertung |
|---|---|---|---|---|---|
| Bestellungen in großen Mengen löschen | iCreative Technologies Inc. | Massenlöschung von Bestellungen direkt im Admin | 1,00 €/Monat, monatlich kündbar, 1 Monat Testphase | SW 6.4.0.0 – 6.7.12.2 | 3,0/5 (2 Rezensionen) |
| Order delete by customer | BuI Hinsche GmbH | Bestellungen gezielt pro Kunde löschen | 4,99 €/Monat bzw. 45,00 €/Jahr | SW 6.6.7.0 – 6.7.12.2 | keine Rezensionen |
| Daten löschen | BartCompany | Breiteres Tool: Bestellungen, Kunden, Produkteigenschaften, Produkte | 19,00 €/Monat bzw. 199,00 €/Jahr, 1 Monat Testphase | SW 6.4.0.0 – 6.7.12.2 | keine Rezensionen |
| Delete order documents in admin | Store-Anbieter (Detail nicht separat geprüft) | Stellt die im Core entfernte Funktion zum Löschen einzelner Dokumente wieder her | 1,99 €/Monat bzw. 1,67 €/Monat bei jährlicher Zahlung (19,99 €/Jahr) | – | – |
Zur Einordnung der Bewertungen: Bei null bis zwei Rezensionen lässt sich keine seriöse Qualitätsaussage treffen – wir nennen die Zahlen hier rein faktisch, ohne sie zu werten. Das erste Plugin, „Bestellungen in großen Mengen löschen“, stammt vom Anbieter iCreative Technologies Inc. (in älteren Quellen teils fehlerhaft als „iCreativetechnologies“ geschrieben).
- Für reine Massenlöschung ohne Kunden-Filter ist das iCreative-Plugin preislich am günstigsten.
- Wer gezielt nach Kunde löschen will (z. B. bei DSGVO-Anfragen einzelner Kunden), ist mit „Order delete by customer“ besser bedient.
- „Daten löschen“ von BartCompany deckt einen breiteren Anwendungsfall ab (auch Produkte, Kunden, Eigenschaften) und ist entsprechend teurer.
- Das vierte Plugin adressiert eine andere Lücke: das nachträgliche Löschen einzelner Dokumente (siehe Fehlerbilder).
Ob die Plugins verknüpfte Dokumente und Dateien beim Löschen mit entfernen, haben wir nicht im Detail getestet – das sollte vor dem produktiven Einsatz an einer Testbestellung selbst verifiziert werden. Wichtig: In allen Fällen bleiben die oben beschriebenen rechtlichen Aufbewahrungsfristen bestehen, ein Plugin hebelt diese nicht aus, es entfernt nur die technische Hürde.
3. Rechtliche Grenzen: Aufbewahrungsfristen für Bestellungen und Rechnungen
Hinweis: Die folgenden Angaben sind allgemeine Informationen zum deutschen Handels- und Steuerrecht, keine Rechtsberatung im Einzelfall. Bei konkreten Löschentscheidungen sollte im Zweifel Steuerberatung oder Rechtsberatung hinzugezogen werden.
Bevor überhaupt technisch gelöscht wird, muss klar sein, ob eine Bestellung rechtlich schon gelöscht werden darf. Hier hat sich 2025 etwas geändert, das viele ältere Anleitungen noch nicht berücksichtigen: Durch das 4. Bürokratieentlastungsgesetz (verkündet am 29.10.2024) wurde die Aufbewahrungsfrist für Buchungsbelege – dazu zählen auch Rechnungen – von zuvor zehn auf acht Jahre verkürzt. Die neue Frist gilt seit dem 1.1.2025 und ausdrücklich auch für Fälle, deren alte Zehn-Jahres-Frist zu diesem Zeitpunkt noch nicht abgelaufen war.
- 8 Jahre: Buchungsbelege, dazu zählen insbesondere Rechnungen (§ 257 HGB in der seit 1.1.2025 geltenden Fassung).
- 6 Jahre: empfangene und abgesendete Handelsbriefe (§ 257 HGB).
- 10 Jahre: Handelsbücher, Inventare, Eröffnungsbilanzen, Jahresabschlüsse – hier hat sich nichts geändert.
Für den Shopware-Alltag bedeutet das konkret: Eine Bestellung, zu der eine Rechnung existiert, darf – unabhängig davon, ob die Datenbank das technisch zulassen würde – in aller Regel erst nach Ablauf der jeweils einschlägigen Frist gelöscht werden. Das ist auch der sachliche Hintergrund, warum Shopware die Löschung technisch über den Dokumenten-Constraint blockiert: Die Software verhindert aktiv, dass aufbewahrungspflichtige Belege versehentlich verschwinden.
Für reine Testbestellungen, Fehlbestellungen ohne Rechnungsstellung oder klar identifizierte Karteileichen ohne steuerliche Relevanz greifen diese Fristen in der Regel nicht – hier ist eine Löschung unproblematischer. Sobald aber ein Dokument existiert, sollte vor jeder SQL-basierten oder Plugin-basierten Löschung geprüft werden, ob die Aufbewahrungsfrist bereits abgelaufen ist.
4. Typische Fehlerbilder beim Löschen von Bestellungen
„Löschen“-Button reagiert nicht sichtbar
Ein häufig im Shopware-Forum beschriebenes Muster: Der Löschen-Button im Admin lässt sich klicken, nach der Bestätigung passiert augenscheinlich nichts – die Bestellung bleibt in der Liste stehen. Laut Community-Berichten liegt die Ursache in den allermeisten Fällen genau am oben beschriebenen Dokumenten-Constraint: Sobald zur Bestellung bereits eine Rechnung oder ein anderes Dokument erzeugt wurde, verweigert die Datenbank den Löschvorgang. Zur Diagnose hilft der Network-Tab der Browser-Entwicklertools (F12): Dort zeigt sich in der Regel eine fehlgeschlagene Request-Antwort mit dem entsprechenden Constraint-Fehler.
Kein Bulk-Löschen für mehrere Bestellungen
Ebenfalls ein wiederkehrendes Thema in Nutzerforen: Wer mehrere, teils auch alte importierte Bestellungen auf einmal löschen will, muss ohne Zusatzsoftware jede Bestellung einzeln durchklicken. Das betrifft auch Bestellungen, die ursprünglich per Import in den Shop gelangt sind – ein natives Bulk-Werkzeug existiert dafür nicht.
Verwaiste Dateien nach SQL-Löschung
Wer direkt in der order-Tabelle löscht (etwa sortiert nach Bestellnummer, paketweise), berichtet in Forenbeiträgen von einem Nebeneffekt: Rechnungen und Lieferscheine bleiben als Dateien unter /files/media sowie als Datenbankeinträge in document bzw. media zurück, wenn sie nicht separat mitgelöscht werden. Diese verwaisten Datensätze sollten nach einer SQL-Löschaktion manuell nachbereinigt werden.
Einzelne Dokumente lassen sich nicht mehr löschen
Nach Community-Angaben ist es seit etwa Ende 2021/Anfang 2022 im Core nicht mehr möglich, ein einzelnes Dokument (z. B. eine fehlerhaft erzeugte Rechnung) nachträglich zu löschen, ohne die komplette Bestellung zu entfernen. Wichtig zur Einordnung: Dieses Datum stammt aus einem Community-Beitrag und ist nicht offiziell von Shopware bestätigt oder in einem Changelog dokumentiert. Für genau diesen Anwendungsfall gibt es das oben genannte Store-Plugin „Delete order documents in admin“, das die frühere Funktion nachrüstet.
Historische Workarounds – bewusst nicht empfohlen
Vereinzelt kursieren in der Community ältere, selbstgebaute Skripte und Community-Plugins, die eine CLI-Löschfunktion für Bestellungen nachrüsten sollen. Da sich Herkunft, Aktualität und Kompatibilität zu 6.7.x für solche inoffiziellen Workarounds nicht zuverlässig belegen lassen, nennen wir hier bewusst kein konkretes Beispiel als Empfehlung. Belegbar ist dagegen: Ein 2020 eröffneter GitHub-Feature-Request für eine native Delete-/Archiv-Funktion wurde inzwischen geschlossen, ohne dass daraus erkennbar eine native CLI-Lösung oder erweiterte Admin-Funktion hervorgegangen wäre.
5. Häufige Fragen zum Löschen von Bestellungen in Shopware 6
Kann ich in Shopware 6 mehrere Bestellungen auf einmal löschen?
Nativ nicht. Die Admin-Oberfläche bietet aktuell keine Bulk-Löschfunktion für Bestellungen – jede Bestellung muss einzeln geöffnet und gelöscht werden. Für Massenlöschungen kommen SQL-Statements (auf eigenes Risiko, mit Backup) oder Store-Plugins wie „Bestellungen in großen Mengen löschen“ infrage.
Warum lässt sich eine Bestellung im Admin nicht löschen, obwohl der Button vorhanden ist?
In den meisten Fällen, weil zur Bestellung bereits ein Dokument (z. B. eine Rechnung) existiert. Ein Fremdschlüssel-Constraint zwischen den Tabellen document und order verhindert das Löschen aktiv auf Datenbankebene.
Wie lange muss ich Bestellungen bzw. Rechnungen aufbewahren?
Seit dem 4. Bürokratieentlastungsgesetz gilt für Buchungsbelege wie Rechnungen seit 1.1.2025 eine Aufbewahrungsfrist von 8 Jahren (vorher 10 Jahre). Handelsbriefe sind 6 Jahre aufzubewahren, Handelsbücher und Jahresabschlüsse weiterhin 10 Jahre. Das ist allgemeines Handels-/Steuerrecht, keine Shopware-spezifische Regel – im Zweifel Steuerberatung hinzuziehen.
Gibt es ein CLI-Kommando, um alte Bestellungen automatisiert zu löschen?
Nein, weder in der offiziellen Commands-Referenz noch im Core-Verzeichnis Checkout/Order/Command ist ein natives Löschkommando vorhanden. Automatisierte Bereinigung läuft nur über eigene Skripte, SQL oder Store-Plugins.
Kann ich ein einzelnes Dokument (z. B. eine fehlerhafte Rechnung) nachträglich löschen, ohne die ganze Bestellung zu entfernen?
Im Core seit rund Ende 2021/Anfang 2022 laut Community-Berichten nicht mehr direkt möglich. Das Store-Plugin „Delete order documents in admin“ stellt diese Funktion gegen eine geringe monatliche Gebühr wieder her.
Quellen und weiterführende Links
- Shopware Docs: Orders Overview
- Shopware Docs: SQL Tips & Tricks
- Shopware Feedback: Missing option to delete documents
- Shopware Store: Bestellungen in großen Mengen löschen (iCreative Technologies Inc.)
- Shopware Store: Delete order documents in admin
- Shopware Developer Docs: Commands Reference
- GitHub: OrderDefinition.php (trunk)
- GitHub: Migration1536233360Document.php (V6_3)
- GitHub API: Migrationsverzeichnis V6_7
- GitHub API: Checkout/Order/Command
- Shopware Store: Order delete by customer
- Shopware Store: Daten löschen (BartCompany)
- Shopware Forum: Mehrere Bestellungen auf einmal löschen
- Shopware Forum: Löschen von Kundenbestellungen nicht mehr möglich
- Shopware Forum: Alte Kundendaten und Bestellungen löschen
- Shopware Forum: Wie kann ich Bestellungen aus der Übersicht löschen
- GitHub Issue #872: Delete/Archive orders
- GitHub PR #904 (shopware/platform)
- HGB § 257 (Gesetze im Internet)
- Aufbewahrungsfristen 2026 – Tabelle für Unternehmen
- GitHub: commands-reference.md (shopware/docs)










