[GELÖST] Spaltenname einer Attributtabelle umnennen

Hallo liebe shopware - Gemeinde,

gibt es eine Funktion oder Möglichkeit, wie man eine bereits angelegte eigene Spalte in einer Attributtabelle umnennen kann (in einem späteren Update), ohne die Spalte wieder zu löschen oder das Plugin neu zu installieren?

Wäre Alter Table ( ALTER TABLE * CHANGE attr_MyField attr_myfield longtext ; ) eine Möglichkeit, oder wird dies durch das entsprechende Model nicht funktionieren? Oder sollte man gleich die neue Spalte neu anlegen, den Inhalt von der alten Spalte in die neue Spalten übertragen und dann die alte Spalte löschen? Was wäre hier der Best Case?

Beste Grüße

Sebastian

Hi Sebastian,

ein ALTER TABLE kannst du beim Update auf jeden Fall machen. Danach aber unbedingt die Doctrine Model Klassen für die Attribute neu generieren lassen, die unter var/cache/production____REVISION___/doctrine/attributes/* liegen. Zum Beispiel mit der Attribut Tabelle der order basket Tabelle

Shopware()->Container()->get('models')->generateAttributeModels(['s_order_basket_attributes']);

Viele Grüße aus Schöppingen

cool Michael Telgmann

1 Like

@Michael Telgmann schrieb:

Hi Sebastian,

ein ALTER TABLE kannst du beim Update auf jeden Fall machen. Danach aber unbedingt die Doctrine Model Klassen für die Attribute neu generieren lassen, die unter var/cache/production____REVISION___/doctrine/attributes/* liegen. Zum Beispiel mit der Attribut Tabelle der order basket Tabelle

Shopware()->Container()->get(‘models’)->generateAttributeModels([‘s_order_basket_attributes’]);

Viele Grüße aus Schöppingen

cool Michael Telgmann

Hallo Michael,

danke für dein Feedback.

Also wäre es so denkbar?

$sqlAccount = 'ALTER TABLE s_articles_attributes CHANGE attr_MyField attr_myfield longtext';
Shopware()->db()->query($sqlAccount,array());

$metaDataCache = Shopware()->Models()->getConfiguration()->getMetadataCacheImpl();
$metaDataCache->deleteAll();

Shopware()->Models()->generateAttributeModels(
     array('s_articles_attributes')
);

Oder ist es zwingend mit:

Shopware()->Container()->get('models')->generateAttributeModels(['s_articles_attributes']);

nötig?

Beste Grüße

Sebastian

Hi Sebastian,

ob du jetzt Shopware()->Container()->get(‚models‘) nutzt oder Shopware()->Models() ist letztlich egal. Kommt aufs selbe hinaus  Wink

Was du allerdings nicht machen musst, ist vorher den MetaDataCache zu leeren. Das wird automatisch mit generateAttributeModels() gemacht. Siehe shopware/ModelManager.php at 5.1 · shopware/shopware · GitHub

Viele Grüße aus Schöppingen

cool Michael Telgmann

1 Like

@Michael Telgmann schrieb:

Hi Sebastian,

ob du jetzt Shopware()->Container()->get(‘models’) nutzt oder Shopware()->Models() ist letztlich egal. Kommt aufs selbe hinaus  Wink

Was du allerdings nicht machen musst, ist vorher den MetaDataCache zu leeren. Das wird automatisch mit generateAttributeModels() gemacht. Siehe https://github.com/shopware/shopware/blob/5.1/engine/Shopware/Components/Model/ModelManager.php#L284

Viele Grüße aus Schöppingen

 Michael Telgmann

Hallo Michael,

danke für die Bestätigung, dass das so auch der Best Case wäre (mit Alter Table Change) - ich will ja schließlich nicht, dass dann im System oder dem Model dann was schief läuft. Ein hin- und herkopieren der Werte mit einer temporären Zwischenspalte wäre dann der definitiv komplizierte und aufwendigere Weg gewesen.

Beste Grüße

Sebastian

Hallo Sebastian,

In 5.2 geht das mit dem Attribute CRUD Service auch mit einem einfachen Update. Aber ich nehme an Du sprichst hier noch von einer 5.1.*.

Liebe Grüße,
Michael

@wolkenkraft schrieb:

Hallo Sebastian,

In 5.2 geht das mit dem Attribute CRUD Service auch mit einem einfachen Update. Aber ich nehme an Du sprichst hier noch von einer 5.1.*.

Liebe Grüße,
Michael

Hallo,

naja teilweise sprech ich von einer Shopware Version 5.1.x. Hast du das mit dem update und dem crud service auch wirklich getestet oder verlässt du dich da nur auf eine Aussage Wink? Ich schon - funktioniert hat es bei mir aber nicht, siehe: http://forum.shopware.com/discussion/comment/163352/#Comment_163352 .

Beste Grüße

Sebastian