Typ eines Attributs nachträglich ändern

Es kann - sollte jedoch nicht - vorkommen, einen bestehende Attributtypen ändern zu müssen. Bei einigen hundert oder tausend Produkten die Daten in ein neu erstelltes Attribut händisch zu übertragen ist schlichtweg zu mühsam und dauert auch zu lange - außerdem muss es ja auch anders gehen.

Und es geht anders. In vier einfachen Schritten ändern wir den Typen eines bestehenden Attributs - und zwar von einem varchar zu einem decimal. Die Attribute können von folgenden Typ sein: static, datetime, decimal, int, text, varchar und werden der zugehörigen Tabelle z.B. catalog_productentitydecimal gespeichert.

1. Daten des Attributs übertragen
Um die bestehenden Daten aus _varchar in die Tabelle _decimal zu übertragen reicht folgendes SQL Statement:

REPLACE catalog_product_entity_decimal (
    SELECT *
    FROM catalog_product_entity_varchar
    WHERE attribute_id =64
)

Im Anschluss sollte die Tabelle catalog_product_entity_varchar noch von den überflüssigen Einträgen befreit werden, dazu das folgende SQL-Statement:

DELETE  FROM catalog_product_entity_varchar WHERE attribute_id=64

2. Datentyp des Attributs ändern
Auch diese Änderung machen wir auf Datenbankebene, die benötigen Informationen entnehmen wir der Tabelle: eav_attribute. Dazu öffen wir den zu ändernden Eintrag und wählen unter backend_type decimal aus.

3. Cache leeren
Im Anschluss sämtliche Caches leeren als auch den Katalog Index neu aufbauen

4. Ausgabe kontrollieren

Hinweis
Wie immer bei Operationen auf Datenbankebene ist es notwendig, vor den Arbeiten ein Backup der Tabellen zu erstellen.



Ein Beitrag von Ingo Hillebrand
Ingo's avatar

Ingo Hillebrand lebt in Soest und arbeitet als Anwendungsentwickler bei der Firma connect-io. Dort beschäftigt sich der studierte Wirtschaftsinformatiker (Bachelor of Science) weiterhin mit Magento. Sie erreichen ihn per e-Mail an ingo@webguys.de oder über Xing.

Alle Beiträge von Ingo

Kommentare
Roland am

Ich habe gerade die Tabellenstruktur nicht vor mir, somit kann ich nicht detailliert werden. Grob gesagt, finde ich das Attribut nicht. Ich meine, da wären für die unterschiedlichen Typen Tabellen gewesen und irgendwie war das nicht dabei, was ich gesucht habe.

Tobias Vogt am

Eigentlich sollte das nach dem gleichen Schema ablaufen? Wo hapert es denn?

Roland am

Hast Du auch einen Tipp, wie man Drop-Down in eine Mehrfachauswahl ändert? :)

Luca am

Hey

Naja...das Attribut wird auf der Page wiedergegeben und da wäre ein schneller Wechsel einfacher gewessen....

Aber wir werden jetzt ein neues Attribut mache....

Danke und Gruss Luca

Ingo Hillebrand am

Hi Luca, wieso möchtest Du denn das Format ändern, was genau möchtest Du damit erreichen? Wäre es nicht einfacher ein neues Attribut Deiner Wahl anzulegen?

Luca am

Naja...es handelte sich um ein Magento Standart Attribut. Evtl. wird das besonders geschützt von magento

attribut: special_from_date

gruss luca

Tobias Vogt am

Hey Luca,

mh. Richtig nachvollziehen kann ich es nicht - eventuell hast du irgendwo eine Einstellung vergessen? Vlt. hilft es auch var/cache einmal komplett zu leeren.

schönen Grüße

Tobi

Luca am

hallo

Das Feld wird schon geändert. Auch erscheint ein Textfeld statt, z. B. datum....aber es nimmt dennoch nur das alte Attributformat an.

Habt ihr da eine Idee?

Ingo Hillebrand am

Das stimmt, das fehlt in meiner Beschreibung, habe es gerade korrigiert. Vielen Dank für den Hinweis.

Ralf Siepker am

In dem Beispiel bleiben aber "Datenleichen" in catalog_product_entity_varchar, denn es fehlt ja noch ein:

DELETE FROM catalog_product_entity_varchar WHERE attribute_id=64

nach dem replace-Statement.

Dein Kommentar