Szukam najszybszej i niezawodnej metody masowej aktualizacji atrybutów. Poniżej znajdują się metody, o których wiem, ale nie wiem, z którymi powinienem się zdecydować.
$store_id = 0;
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($product_id),
array('attribute_code' => $attribute_code),
$store_id
);
lub
$product->setData($attribute_code, 1234);
$product->getResource()->saveAttribute($product, $attribute_code);
magento-1.8
magento-enterprise
product-attribute
best-practice
Deepak Mallah
źródło
źródło
load
. że cokolwiek, ale nie szybko. Na przykład w metodzie 2 pierwszy wiersz z ładowaniem produktu jest bezużyteczny.$product
Nigdzie nie korzystasz .W rzeczywistości istnieją 3 sposoby aktualizacji atrybutu produktu bez zapisywania pełnego produktu. W zależności od kodu / wymagań jedno może być szybsze niż drugie.
Metoda 1:
Metoda 2:
Metoda 3: (najszybsza)
Wszystkie powyższe metody są znacznie szybsze, co pozwala zaoszczędzić cały produkt, a mimo to istnieją pewne istotne różnice w wydajności:
Method 1
:Method 2
:(można przekazać wiele produktów i wiele atrybutów)
Method 3
:(więc jest to podejście mieszane między metodą 1 i 2)
Metoda 3 jest jednak bardziej elastyczna i tak będziesz musiał ręcznie reindeksować te produkty / atrybuty. (w celu zaktualizowania ich w interfejsie użytkownika)
Może się przydać, jeśli chcesz szybko zaktualizować wiele produktów, a następnie wywołać reindex na końcu.
(jeśli użyjesz metody 2, po aktualizacji wywoływany jest reindeks dla każdego produktu, a wiele wywołań spowalnia cały proces)
Aby ręcznie reindeksować pojedynczy produkt, zobacz funkcje dostarczone przez Mage_Catalog_Model_Product_Flat_Indexer, takie jak:
updateAttribute($attributeCode, $store = null, $productIds = null)
updateProduct($productIds, $store = null)
źródło
catalog_product_entity
.value_id
Zcatalog_product_entity
GDZIE (identyfikator_obiektu = 4 ORAZ identyfikator_atrybutu = '68 'ORAZ identyfikator_użytkownika = '29') `` nie spodziewałem się tego. Działa na 1.9.3.2Aktualizacja
„Masowa aktualizacja atrybutów” dla atrybutów lub produktów?
Pomyśl, że aktualizacja wielu atrybutów jest już odpowiedzią, ale w przypadku produktów może to być przydatne ...
Jeśli chcesz zaktualizować produkty z kolekcji, nie powinieneś tego robić ...
Spowoduje to wysłanie zdarzeń, odbudowanie cenników i indeksów. Dzięki temu żadne zdarzenia (i niektóre inne rzeczy) nie są pomijane i są znacznie szybsze.
Aby uniknąć aktualizacji pricerule, możesz dodać ...
Aby wyłączyć / włączyć reindeks w locie, spójrz na to ... https://github.com/Flagbit/Magento-ChangeAttributeSet/commit/676f3af77fec880bc64333403675d183e8639fae
A także opróżnianie pamięci podręcznej przed aktualizacją masową (produktu) może zwiększyć wydajność ...
Niektóre liczby z debugowania tutaj: https://github.com/Flagbit/Magento-ChangeAttributeSet/issues/16
Mage::getSingleton('catalog/product_action')->updateAttributes(...)
wydaje się nie być najszybszą metodą ... przynajmniej nie z włączoną konfiguracją listy odtwarzania i włączonymi płaskimi stołami ...saveAttribute()
updateAttributes()
updateAttributes()
(singleton zasobów)źródło
updateAttributes() (resource singleton)
bierze rzeczywistą wartość administratora? lub id elementu rozwijanego? (jakoś zawsze nie otrzymujemy żadnej wartości / pustej wartości przy użyciu tej metody, tzn. nic nie zostało zaznaczone