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.
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.
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.
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?
Mittlerweile glaube ich mir die Fragen mehr oder weniger mit Hilfe aus der Community und teilweise Fehlermeldungen beantwortet zu haben:
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.
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.
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.
Mittlerweile glaube ich mir die Fragen mehr oder weniger mit Hilfe aus der Community und teilweise Fehlermeldungen beantwortet zu haben:
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.
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.
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.