Ostatnio otarłam się o temat modyfikacji atrybutów w magento za pomocą skryptu sql. Nie od dziś wiadomo, że im większy silnik tym więcej relacji, a co za czym idzie większe zamieszanie. Co do nazewnictwa tabel magento jest dość intuicyjne, jednak jest ich tyle, że nie trudno o zawrót głowy.
Zacznijmy może od tego czym jest w ogóle model EAV (Encja-Atrybut-Wartość). Jest to model, który upraszcza opisywanie encji z potencjalnie wieloma atrybutami, co do których w dodatku nie potrzebujemy mieć stałego dostępu. Brzmi enigmatycznie, ale poniższy UML, bazujący na strukturze Magento, powinien zaprezentować to przejrzyściej.
Stwórzmy więc proste zapytanie, które pobierze cenę produktu dowolnie wybranego przez nas produktu:
SELECT cped.value, cped.store_id FROM eav_entity_type eet JOIN eav_attribute ea ON eet.entity_type_id = ea.entity_type_id AND ea.attribute_code = 'price' AND eet.entity_type_code = 'catalog_product' JOIN catalog_product_entity_decimal cped ON ea.attribute_id = cped.attribute_id WHERE cped.entity_id = 167 FROM eav_entity_type eet JOIN eav_attribute ea ON eet.entity_type_id = ea.entity_type_id AND ea.attribute_code = 'price' AND eet.entity_type_code = 'catalog_product' JOIN catalog_product_entity_decimal cped ON ea.attribute_id = cped.attribute_id WHERE cped.entity_id = [id_produktu]
Wynikiem zapytania będzie wskazanie konkretnych cen produktu dla każdego ze storów. Mowa oczywiście o cenie podstawowej. Jeśli chodzi o promocje i tzw. „tier prices”, temat jest dużo bardziej skomplikowany i opisze go w innym artykule 🙂