Datenbanktabellen mit Feldern erweitern.

Liebes Shopwareler, eine kurze Frage:

Ich möchte Datenbanktabellen wie etwa product, category, currency erweitern und Felder zu diesen Tabellen hinzufügen die durch die API befüllbar sind.

Wie läuft das genau? Eigene Tabellen habe ich bereits angelegt. Das klappt alles soweit auch gut. Und die werden auch erkannt.

Nun brauche ich aber eben noch spezielle Felder in bereits vorhandenen Tabellen und möchte gerne wissen wo ich in meinem Plugin diese Ergänzugen vornehmen muss.

Wo ich welche Dateien ergänzen muss.

Vielen Dank und viele Grüße

Warum nimmst du nicht die Attributfelder? 

Grüße Matthias

Das soll über EntityExtensions möglich sein. Ich selber hatte das, zumindest in kurzer Zeit, nicht hinbekommen und stattdessen eine EntityExtensions geschrieben, wo die Daten in einer neuen Tabelle liegen mit 1zu1 Relation, was auch von der API erkannt wurde. Setzen der Werte ist dann aber wohl nicht über den gleiche API Call möglich, sondern ein neuer nötig.

 

@MatthiasH schrieb:

Warum nimmst du nicht die Attributfelder? 

Grüße Matthias

Je nach Einsatzzweck können die Zusatzfelder eher suboptimal sein, weil dann alle neuen Felder in einem einzigen JSON Feld pro Typ (Produkt, Kategorie, …) in der Datenbank gepackt wird. Gerade bei Produkten, wo auf Dauer sicher recht viel hinzukommt, dürften Attribute, auf die man evtl. Filtern will, recht langsam sein. Das muss dann wahrscheinlich eher über ElasticSearch laufen, damit es von de rPerformance gut ist aber das hab ich mir bei SW6 noch nicht angeschaut. Hatte mal wo hier im Forum gelesen, dass die ElasticSearch Anbindung bisher woll noch nicht wirklich gut sein soll.

1 „Gefällt mir“

Vielen Dank schon einmal für die Antworten.

Ich habe den folgenden Eintrag in der Dokumentation gefunden: Shopware 6: Entity extension

Leider wird hier überhaupt nicht aufgeführt, an welcher Stelle im Plugin diese Dateien zu ergänzen sind.

Wenn ich es richtig sehe, sind lediglich die Extension der Subscriber und der Eintrag in der services.xml vorzunehmen.

Wo im Hierarchiebaum des Plugins müssen der Subscriber und die Extension angelegt werden?

Und wenn ich mehrere Felder ergänze in unterschiedlichen Tabellen, benötige ich dann für jede Tabelle diese beiden Dateien?

Bedeutet das auch, dass ich wenn das Plugin wieder deinstalliert wird, das Feld nicht löschen muss, da alles lediglich über den Subscriber läuft?

 

Nein du brauchst mehr. Das von dir verlinkte HowTo ist ein recht praxisfernes Beispiel, wo ein neues Attribut nur zur Laufzeit existiert und nicht in der Datenbank. Entsprechend konnten sie sich die weitern nötigen Klassen in dem Beispiel sparen.

Du musst auch für deine neuen Tabellen jeweils eine Collection, Entity und Definition Klasse erstellen, wo genau definiert ist, wie die Tabelle aussieht, Dateitypen, wie sie zu anderen extierenden verknüpft ist (FK) usw. Und die Definition Klasse muss auch in der XML registiert werden. Ein echtes Beispiel gibt es dafür soviel ich weiß nicht.

Wo du die eigentliche Extension Klasse speicherst, ist nicht festgelegt. Das kannst du in der XML definieren.

Was die eigenen Tabellen angeht, so habe ich das bereits erledigt.
Das Problem besteht darin, dass ich auch Entity Extensions anlegen muss, also nicht nur custom Tabellen sondern eben auch Felder die zu bereits bestehenden Tabellen hinzugefügt werden müssen.

Gleichzeitig müssen diese auch über die API ansprechbar sein. Hast du dafür eine Idee?

Hi aroe,

bist du schon weitergekommen? Ich stehe vor einem ähnlichen Problem und komme mit den Beispielen aus der Doku überhaupt nicht weiter.

Mein Wunsch ist es, die Media Entity um ein einziges Feld (Copyright) zu erweitern - und finde kein vernünftiges Beispiel dafür.

 

Ja, mit der Doku komme ich auch nicht weiter. Ist ziemlich schlecht. Nach dem Motto: Kauf Consulting ein oder p*ss off. 

Mittlerweile glaube ich mir die Fragen mehr oder weniger mit Hilfe aus der Community und teilweise Fehlermeldungen beantwortet zu haben:

  1. Wer eine Entity Extension einrichten möchte, der sollte darauf Acht geben auf dem aktuellsten Stand bei Shopware zu sein, denn die Datei Entity Extension.php im DAL ist nicht bei jeder Shopware 6 Version zu finden gewesen. Zumindest auf dem Entwicklungsbranch auf dem ich war konnte ich sie nicht entdecken.

  2. Wenn ihr die Entity um ein Feld erweitern wollt, dann genügt das Tutorial zur Entity Extension nicht. Dort fehlt nämlich noch die kurze aber wesentliche Information, dass man das Feld in der Datenbank erst einmal per Migration anlegen sollte. Heisst also man muss erst das Feld per Migration bei Installation des Plugins anlegen und anschließend bei der Deinstallation wieder entfernen. Wenn ihr hier noch weitere Infos benötigt schreibt nochmal, dann gehe ich da noch etwas ausführlicher drauf ein.

  3. Sobald die Entity angelegt wurde, solltet ihr euch an das Tutorial zum Anlegen einer Entity Extension anlegen und das darin angelegte Custom Struct durch euren Feldtyp ersetzen.

Viel Erfolg, hoffe es hilft euch :slight_smile:

@aroe schrieb:

Mittlerweile glaube ich mir die Fragen mehr oder weniger mit Hilfe aus der Community und teilweise Fehlermeldungen beantwortet zu haben:

  1. Wer eine Entity Extension einrichten möchte, der sollte darauf Acht geben auf dem aktuellsten Stand bei Shopware zu sein, denn die Datei Entity Extension.php im DAL ist nicht bei jeder Shopware 6 Version zu finden gewesen. Zumindest auf dem Entwicklungsbranch auf dem ich war konnte ich sie nicht entdecken.

  2. Wenn ihr die Entity um ein Feld erweitern wollt, dann genügt das Tutorial zur Entity Extension nicht. Dort fehlt nämlich noch die kurze aber wesentliche Information, dass man das Feld in der Datenbank erst einmal per Migration anlegen sollte. Heisst also man muss erst das Feld per Migration bei Installation des Plugins anlegen und anschließend bei der Deinstallation wieder entfernen. Wenn ihr hier noch weitere Infos benötigt schreibt nochmal, dann gehe ich da noch etwas ausführlicher drauf ein.

  3. Sobald die Entity angelegt wurde, solltet ihr euch an das Tutorial zum Anlegen einer Entity Extension anlegen und das darin angelegte Custom Struct durch euren Feldtyp ersetzen.

Viel Erfolg, hoffe es hilft euch :)

Halllo, kannst du deine Lösung etwas detallierter ausführen? Ich komme da auch nicht weiter. Ich habe ein weiteren Thread zum Thema EntityExtansion erstellt, da es (für mich) keine schlüssige Erklärung gibt.
Mein Anliegen habe ich auch in Slack angefragt.