Я видел много случаев, когда что-то, вставленное в базы данных Magento вручную или через API, будет иметь отсутствующий атрибут, который по какой-либо причине установлен на значение по умолчанию при сохранении в пользовательском интерфейсе Magento. Пользовательский интерфейс правильно устанавливает значения по умолчанию, тогда как вставки API или базы данных не устанавливают атрибут.
Итак, в вашем случае моя первая строка отладки будет
- «Загрузить» [sic] продукт с API (какие методы API вы используете? Или вы используете пользовательский API?)
- Сделайте снимок значений атрибутов для этого продукта
- Сохраните продукт через интерфейс пользователя Magento
- Сделайте снимок значений атрибутов для этого продукта
- Diff # 2 и # 4
- Убедитесь, что ваш метод «upload» [sic] устанавливает любые атрибуты, присутствующие в # 4, но не # 2
Magento использует схему моделирования значений атрибута Entity , которая оптимизируется для гибкости базы данных, а не для запросов. Короче говоря, вы можете запустить следующие запросы, чтобы получить основные значения атрибута продукта.
Вы захотите заменить каждый экземпляр [3455] идентификатором продукта из вашей базы данных. Вы можете получить этот идентификатор, изучив URL-адрес гордости в пользовательском интерфейсе Magento Admin. Вы можете запускать запрос без предложений WHERE, хотя индексирование по умолчанию не оптимизировано для этого варианта использования, и вы получите медленный запрос в зависимости от размера вашей базы данных.
SELECT eav_attribute.frontend_label, eav_attribute.attribute_code,
catalog_product_entity_varchar.value
FROM catalog_product_entity
LEFT JOIN catalog_product_entity_varchar ON catalog_product_entity.entity_id = catalog_product_entity_varchar.entity_id
LEFT JOIN eav_attribute on catalog_product_entity_varchar.attribute_id = eav_attribute.attribute_id
WHERE catalog_product_entity.entity_id = 3455
UNION
SELECT eav_attribute.frontend_label, eav_attribute.attribute_code,
catalog_product_entity_text.value
FROM catalog_product_entity
LEFT JOIN catalog_product_entity_text ON catalog_product_entity.entity_id = catalog_product_entity_text.entity_id
LEFT JOIN eav_attribute on catalog_product_entity_text.attribute_id = eav_attribute.attribute_id
WHERE catalog_product_entity.entity_id = 3455
UNION
SELECT eav_attribute.frontend_label, eav_attribute.attribute_code,
catalog_product_entity_datetime.value
FROM catalog_product_entity
LEFT JOIN catalog_product_entity_datetime ON catalog_product_entity.entity_id = catalog_product_entity_datetime.entity_id
LEFT JOIN eav_attribute on catalog_product_entity_datetime.attribute_id = eav_attribute.attribute_id
WHERE catalog_product_entity.entity_id = 3455
UNION
SELECT eav_attribute.frontend_label, eav_attribute.attribute_code,
catalog_product_entity_decimal.value
FROM catalog_product_entity
LEFT JOIN catalog_product_entity_decimal ON catalog_product_entity.entity_id = catalog_product_entity_decimal.entity_id
LEFT JOIN eav_attribute on catalog_product_entity_decimal.attribute_id = eav_attribute.attribute_id
WHERE catalog_product_entity.entity_id = 3455
UNION
SELECT eav_attribute.frontend_label, eav_attribute.attribute_code,
catalog_product_entity_gallery.value
FROM catalog_product_entity
LEFT JOIN catalog_product_entity_gallery ON catalog_product_entity.entity_id = catalog_product_entity_gallery.entity_id
LEFT JOIN eav_attribute on catalog_product_entity_gallery.attribute_id = eav_attribute.attribute_id
WHERE catalog_product_entity.entity_id = 3455
UNION
SELECT eav_attribute.frontend_label, eav_attribute.attribute_code,
catalog_product_entity_int.value
FROM catalog_product_entity
LEFT JOIN catalog_product_entity_int ON catalog_product_entity.entity_id = catalog_product_entity_int.entity_id
LEFT JOIN eav_attribute on catalog_product_entity_int.attribute_id = eav_attribute.attribute_id
WHERE catalog_product_entity.entity_id = 3455;