Shopware

Was eine Variante von ihrem Hauptprodukt erbt

Vererbung ist in Shopware kein Schalter, sondern ein NULL-Wert in der Spalte. 71 von 79 Spalten sind vererbbar — die vier, die es nicht sind, erklären die meisten Überraschungen.

Pixup MediaVeröffentlicht am 8 Min. Lesezeit
Diagramm: Hauptprodukt und Variante nebeneinander, dazwischen ein Vererbungspfeil, rechts die vier nie vererbten Spalten stock, available, sales und type.
Vererbung ist kein Schalter: Eine leere Spalte holt den Wert vom Hauptprodukt, eine gefüllte nicht.

Varianten verhalten sich in Shopware anders, als die Verwaltungsoberfläche vermuten lässt. Dort sieht man ein Kettensymbol und denkt an einen Schalter: Kette geschlossen, Wert kommt vom Hauptprodukt; Kette offen, eigener Wert. Technisch gibt es diesen Schalter nicht. Wir haben nachgesehen, was tatsächlich in der Datenbank passiert — und die Antwort erklärt eine ganze Reihe von Überraschungen bei Import, Pflege und Schnittstellen.

Der Befund

Wir haben die Tabelle product in beiden laufenden Installationen ausgewertet, Spalte für Spalte, und uns nur eine Eigenschaft angesehen: Darf sie NULL sein?

6.6.10.66.7.13.1
Spalten in product gesamt7579
davon vererbbar (NULL erlaubt)6871
nicht vererbbar78

Das ist der ganze Mechanismus. Eine Variante ist eine Zeile in derselben Tabelle wie ihr Hauptprodukt, mit einer gesetzten parent_id. Jede Spalte, die leer bleiben darf, ist damit vererbbar: Steht dort nichts, liefert Shopware beim Lesen den Wert des Elternteils aus.

Es gibt keinen zweiten Speicherort, keine Kopie und keinen Merker, der festhält, ob gerade geerbt wird. Der leere Wert ist die Vererbung.

Die acht Ausnahmen — vier davon sind uninteressant

Von den acht Spalten, die in 6.7 nicht leer sein dürfen, sind vier rein technischer Natur:

  • id — der Primärschlüssel
  • version_id — die Versionierung des Kerns
  • auto_increment — die laufende Nummer
  • cms_page_version_id — die Version der zugeordneten Erlebniswelt

Diese vier tauchen in keinem Pflegeprozess auf. Interessant sind die anderen vier, und die haben alle denselben Grund.

stock, available, sales — und in 6.7 auch type

FeldWarum es nicht vererbt wird
stockLagerbestand ist je Variante verschieden. Die blaue Hose in Größe M hat einen anderen Bestand als dieselbe Hose in L. Ein geerbter Bestand wäre in jedem Shop falsch.
availableDie Verfügbarkeit folgt dem Bestand. Sie wird berechnet, nicht gepflegt — und zwar je Zeile.
salesVerkaufszahlen entstehen pro Variante. Sie sind die Grundlage für Topseller-Sortierungen und dürfen deshalb nicht vom Elternteil kommen.
typeNeu in 6.7. Der Produkttyp unterscheidet physische von digitalen Produkten. Eine Variante kann nicht von einem anderen Typ sein als ihr Hauptprodukt — deshalb steht der Wert fest in jeder Zeile.

Die ersten drei haben eine Gemeinsamkeit: Sie sind Mengen. Alles, was gezählt wird, gehört der einzelnen Variante. Alles, was beschreibt — Name, Beschreibung, Hersteller, Medien, Kategorien, Eigenschaften, Preise, Steuersatz, Custom Fields — ist vererbbar.

Was das im Alltag bedeutet

Ein leeres Importfeld ist kein leerer Wert

Das ist die häufigste Falle. Wer Variantendaten per CSV pflegt und eine Spalte leer lässt, schreibt nicht „leer" in die Variante. Er gibt das Feld an das Hauptprodukt zurück. Beim nächsten Seitenaufruf steht dort wieder der Wert des Elternteils, und es sieht aus, als hätte der Import nichts getan oder etwas überschrieben.

Wenn Sie eigene Variantenwerte behalten wollen, muss jede Zeile des Imports sie mitliefern. Details zu den Feldern und Profilen stehen in unserem Überblick zu Import und Export in Shopware.

Preise sind vererbbar — Preisregeln sind es nicht

Der Preis einer Variante kommt vom Hauptprodukt, solange er nicht gesetzt ist. Die Regeln, die darüber entscheiden, welcher Preis am Ende gilt, sind davon unabhängig. Wenn mehrere Preisregeln gleichzeitig greifen, entscheidet nicht die Vererbung, sondern die Regelauswertung — dazu haben wir gemessen, welche Preisregel gewinnt.

Übersetzungen hängen an der Zeile, nicht an der Vererbung

Übersetzbare Felder liegen in product_translation, also in einer eigenen Tabelle je Sprache. Die Vererbungslogik greift dort genauso: leere Übersetzung, Wert vom Elternteil. Wer Varianten übersetzt, sollte deshalb vorher wissen, welche Felder überhaupt sprachabhängig sind — wir haben das in Produktdaten übersetzen ohne Datenverlust auseinandergenommen.

Schnittstellen lesen den aufgelösten Wert

Über die API bekommt man in der Regel den bereits aufgelösten Wert: Fragt man eine Variante ab, steht dort der Name des Hauptprodukts, obwohl die Spalte der Variante leer ist. Wer wissen muss, ob ein Wert geerbt oder eigen ist, muss die Rohdaten betrachten oder das Feld gezielt über die Variantenzeile prüfen. Für Integrationen ist das ein Unterschied mit Folgen: Ein „Synchronisiere alle Produktnamen"-Job schreibt sonst in jede Variante einen eigenen Namen und hebt die Vererbung flächendeckend auf — ohne dass jemand das beabsichtigt hätte.

Der Test, der Klarheit schafft

Wenn Sie in einem konkreten Shop wissen wollen, ob ein Feld geerbt ist, brauchen Sie keine Datenbank:

  1. Öffnen Sie die Variante in der Verwaltung.
  2. Sehen Sie sich das Kettensymbol neben dem Feld an. Geschlossen bedeutet: Der Wert kommt vom Hauptprodukt.
  3. Ändern Sie den Wert im Hauptprodukt und laden Sie die Variante neu. Ändert sich der Wert mit, war er geerbt.

Der dritte Schritt ist der ehrliche. Das Symbol zeigt den Zustand, den die Verwaltung annimmt; der Durchgriff zeigt den Zustand, den die Datenbank hat. Bei Daten, die einmal über einen Import gelaufen sind, weichen beide häufiger voneinander ab, als man denkt.

Grenzen dieser Messung

Wir haben die Nullbarkeit der Spalten ausgewertet — also die technische Möglichkeit der Vererbung. Nicht gemessen haben wir, wie sich einzelne Erweiterungen verhalten, die eigene Felder an product anhängen: Ob deren Spalten NULL erlauben, entscheidet das jeweilige Plugin. Ebenfalls nicht Gegenstand dieser Messung ist das Verhalten der Verwaltungsoberfläche bei Massenänderungen; dort kann die Kette auch dann aufgelöst werden, wenn man nur einen Wert bestätigt.

Wer Varianten in größerem Umfang pflegt, importiert oder über Schnittstellen bespielt, sollte diese vier Felder kennen und den Rest als das behandeln, was er ist: ein einziger Wert, der an einer Stelle steht und an vielen gelesen wird.

Häufige Fragen

Wie funktioniert die Vererbung bei Shopware-Varianten technisch?
Über NULL. Jede vererbbare Spalte der Tabelle product darf leer sein. Ist sie es bei der Variante, liefert Shopware den Wert des Hauptprodukts aus. Es gibt keine Kopie und keinen zweiten Speicherort.
Welche Felder erbt eine Variante nie?
Fachlich vier: stock, available, sales und in 6.7 zusätzlich type. Lagerbestand, Verfügbarkeit und Verkaufszahlen gehören zwingend der einzelnen Variante.
Warum steht bei meiner Variante plötzlich wieder der Name des Hauptprodukts?
Weil das Feld geleert wurde. Ein leeres Feld ist in diesem Datenmodell die Anweisung, den Wert des Elternteils zu nehmen — nicht die Anweisung, nichts anzuzeigen.
Kann ich Vererbung per Import steuern?
Ja, aber mit Vorsicht. Eine leere Spalte im Importprofil stellt die Vererbung wieder her. Wer eigene Variantenwerte behalten will, muss sie in jeder Zeile mitliefern.
WeiterführendShopware-Agentur