Якщо ви хочете змінити тип атрибута продукту з випадаючого (dropdown) на текстовий (text) у Magento 2, все, що вам потрібно зробити, це запустити наступні SQL запити (будь-ласка, зробіть резервну копію бази даних перед виконанням):
1. Цей запит змінить налаштування атрибута та перетворить його на текстовий (text) атрибут.
UPDATE eav_attribute SET
backend_type = "varchar",
frontend_input = "text",
source_model = ""
WHERE attribute_code = "MY_ATTRIBUTE_CODE";
2. Цей запит скопіює дані випадаючого (dropdown) атрибута до таблиці значень текстових (text) атрибутів та замінить ідентифікатори опцій (option IDs ) на їх фактичні назви.
INSERT INTO catalog_product_entity_varchar
SELECT null as value_id, pei.attribute_id, pei.store_id, pei.entity_id, aov.value as value
FROM catalog_product_entity_int pei
LEFT JOIN eav_attribute_option ao ON pei.attribute_id = ao.attribute_id
LEFT JOIN eav_attribute_option_value aov ON ao.option_id = aov.option_id
WHERE
pei.value IS NOT NULL
AND pei.attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = "MY_ATTRIBUTE_CODE")
AND aov.store_id = 0
AND pei.value = ao.option_id;
3. Цей запит видалить всі застарілі дані значень випадаючого (dropdown) атрибута .
Увага! У запитах, будь ласка, замініть "MY_ATTRIBUTE_CODE" вашим кодом атрибута.
DELETE FROM catalog_product_entity_int WHERE attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = "MY_ATTRIBUTE_CODE")
DELETE s.* FROM eav_attribute_option_value s INNER JOIN eav_attribute_option o on o.option_id = s.option_id INNER JOIN eav_attribute a on a.attribute_id = o.attribute_id WHERE a.attribute_code IN ('MY_ATTRIBUTE_CODE');
DELETE s.* FROM eav_attribute_option_swatch s INNER JOIN eav_attribute_option o on o.option_id = s.option_id INNER JOIN eav_attribute a on a.attribute_id = o.attribute_id WHERE a.attribute_code IN ('MY_ATTRIBUTE_CODE');
DELETE FROM eav_attribute_option WHERE attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = "MY_ATTRIBUTE_CODE");
4. Очистіть кеш Magento.