Hallo,
nach der Migration von 5 auf 6 ist bei allen Produkten der Wert eines Zusatzfeldes (custom_bst_product_mhd_date) eines Plugins in ein Feld ‚migration_shopname_product_bst_product_mhd‘ migriert worden. Wie bekomme ich den Wert nun in das korrekte Feld. Vielleicht hätte das Plugin bei der Migration installiert sein sollen. Nun ist es zu spät. Wie kopiert man den Wert in der DB in das richtige Feld?
Ja, bei der Migration ist das ein normales Verhalten. Entweder passt man seine Anwendung so an, dass es die Felder von der Migration nimmt oder man schreibt ein Script was die Werte dann in die neuen Textfelder schreibt - Sprich DB-Queries etc..
Dachte ich mir fast schon. Aber irgendwie schietere ich in diesem Fall an den Queries. Ich finde schon mal gar nicht, wo und wie bei den Produkten die Zusatzfelder gespeichert sind. Und das ganze Binary-Gedönse macht es auch nicht leichter …
Eventuell muss du dir auch Hilfe suchen. Diese Felder werden als JSON-String abgespeichert. Man muss also schon ein kleines Tool schreiben, um die Migrationsfelder auszulesen und dann bei den Produkten neu schreiben zu können. Mein Fehler, ich hätte das gleich mit erwähnen können. Ist aber alles möglich, sofern der Umgang mit PHP und MySQL nicht fremd ist. Vielleicht auch über die API möglich, sofern man sich damit beschäftigt hat.
Du könntest auch mit den JSON-Funktionen von MySql/MariaDB arbeiten mit einem Query wie:
UPDATE
`product_translation`
SET
`custom_fields` = JSON_REMOVE(
JSON_SET(
`custom_fields`,
'$.custom_bst_product_mhd_date',
JSON_UNQUOTE(JSON_EXTRACT(`custom_fields`, '$.migration_shopname_product_bst_product_mhd'))
),
'$.migration_shopname_product_bst_product_mhd'
)
WHERE
`custom_fields` IS NOT NULL AND
JSON_EXTRACT(`custom_fields`, '$.migration_shopname_product_bst_product_mhd') IS NOT NULL;
Idealerweise vorher aber mal einen Select-Query dazu absenden um zu schauen ob es auch die korrekten Zeilen sind:
SELECT
`product_id`,
JSON_REMOVE(
JSON_SET(
`custom_fields`,
'$.custom_bst_product_mhd_date',
JSON_UNQUOTE(JSON_EXTRACT(`custom_fields`, '$.migration_shopname_product_bst_product_mhd'))
),
'$.migration_shopname_product_bst_product_mhd'
) AS `updated_custom_fields`
FROM `product_translation`
WHERE `custom_fields` IS NOT NULL
AND JSON_EXTRACT(`custom_fields`, '$.migration_shopname_product_bst_product_mhd') IS NOT NULL;