Datenbank Tabelle erweitern

Hi,

um Prozesse für unsere ERP-Anbindung bzw. auch Produktion steuern zu können, bräuchte ich mind 2 zusätzliche Informationen (ein Flag und eine ID) zu order_line_item.

Die Spalte custom_fields ist dafür aber aus Performancegründen nicht wirklich gut geeignet, da ich häufig Queries ausführen muss, mit dem Flag und der ID als Bedingung. Da hat einerseits das JSON Feld Nachteile auf die Performance und ein Index auf dieses Feld dürfte allgemein wohl auch nicht gut geeignet sein. Meine Erfharung mit JSON Feldern in MYSQL hält sich aber auch noch sehr in Grenzen.

Jetzt könnte man 2 zusätzliche Felder zu order_line_item hinzufügen. Aber wie geht das richtig? EntityExtension scheint doch eher für neue Tabelle mit einer Beziehung zw. anderen Objekten gedacht zu sein oder nicht? Denn die eher simplen HowTos, decken immer nur den einfachst möglichen Fall ab und haben immer eine 1:n o.ä. Beziehung, was dafür spricht, dass diese neuen Felder ja in einer neuen Tabelle landen. https://docs.shopware.com/en/shopware-platform-dev-en/internals/core/data-abstraction-layer/extensions

Aber gut, eine extra ERP-Tabelle für die 2 Felder wäre auch noch ok, aber schätze die API würde diese neuen Felder nicht kennen und nutzen können? Und wenn man das selber für die API schreiben muss, gibts dann irgendwo ein besseren HowTo als https://docs.shopware.com/en/shopware-platform-dev-en/how-to/api-controller ?

Du brauchst ne EntityExtension mit einer OneToOne

1 „Gefällt mir“

@Shyim schrieb:

Du brauchst ne EntityExtension mit einer OneToOne

Ok danke, werde ich probieren. Wird die API die neuen Felder erkennen, dass man eines der neuen Felder via API setzen kann? 

Ja, passiert automatisch

1 „Gefällt mir“

@Shyim schrieb:

Ja, passiert automatisch

Hab jetzt damit begonnen aber wie immer das gleiche Problem. Es gibt in den HowTos keine sinnvollen Anleitungen.

Ich schätze ich müsste:

  • Ein Migration Skrip erstellen, dass die neuen Felder hinzufügt
  • defineFields() irgendwie erweitern, um die 2 neuen Felder als Int und Bool zu definieren?
  • OneToOneAssociationField() sollte wie aussehen? Nur propertyName und storageName eintragen, weil referenceField und referenceClass wahrscheinlich nur für neue Tabellen nötig sein sollte, um diese zu verknüpfen.

Ich habe am Ende EntityExtension geschrieben, die aber eine zusätzliche Tabelle hinzufügt. Zum einen habe ich nichts gefunden, wie OneToOneAssociationField() aussehen muss, wenn es innerhalb der gleiche Tabelle bleibt und zum anderen ist evtl. auch sauberer, das von den Core Tabellen zu trennen.

Scheint nach den ersten Tests zu klappen. Die Erweiterung wird in der API angezeigt. Ich kann neue Einträge über POST senden, die auch angelegt werden auch auch der order_line_item Endpoint verweist auf die Erweiterung.