Próbuję zaktualizować cenę do wielu produktów (ponad 10.000). Sposób, w jaki to robię teraz, jest niezwykle czasochłonny. Jaki jest najlepszy sposób na przeglądanie wszystkich produktów i aktualizowanie większości z nich?
Dzięki
magento-1.9
product
products-management
eftihios1986
źródło
źródło
Odpowiedzi:
Cześć Magento podaj atrybut poniżej kodu
Przykład:
Korzystanie z kolekcji produktów:
źródło
Mage::getSingleton('catalog/product_api')->update();
iMage::getSingleton('catalog/product_action')->updateAttributes()
. produkt_api zajął średnio 1,7 sekundy na śr.$product->getResource()->saveAttribute()
przyjął jednak średnio 0,04 sekundy na średnim. Dzięki!$product->getResource()->saveAttribute
akcji. DZIĘKI!!Napisz zapytanie SQL.
Drugi najlepszy sposób (i ten, który polecam):
\Mage_Catalog_Model_Resource_Product_Action::updateAttributes
Przykład kodu u_maxx:
Multiselects są zwykle zapisywane jako liczby całkowite oddzielone przecinkami, jak
27,42,4711
. Dlatego jeśli zmienisz wartość, aby powiedzieć1
, inne wartości zostaną utracone. Ale to, co możesz zrobić, to coś w rodzajuCONCAT(value, ',1')
dodania nowej wartości do końca, oddzielonej przecinkiem. Myślę, że nawet jeśli dodasz wartość dwa razy, nie stanowi to problemu, ponieważ Magento filtruje ją przy następnym zapisaniu elementu i ignoruje drugą wartość.źródło
<?php $allProductIds = Mage::getModel('catalog/product')->getCollection()->getAllIds(); $attributeCode = 'some_eav_attribute'; $attributeValue = NULL; $attrData = array( $attributeCode => $attributeValue ); $storeId = 0; Mage::getSingleton('catalog/resource_product_action')->updateAttributes($allProductIds, $attrData, $storeId);
Mage::getSingleton('catalog/resource_product_action')
sięMage::getModel('catalog/product_action')
z dokładnie te same parametry wymienione powyżej.10 000 produktów, użyj SQL. EAV po prostu zamazuje wody. Na pytanie jest najszybszy sposób.
Znajdź identyfikator_atrybutu
Aktualizacja z znalezionym
attribute_id
z powyższego zapytania.Podejrzewam, że można wykonać podselekcję z aktualizacją, ale dla uproszczenia łatwiej jest uchwycić dwa zapytania SQL.
UWAGA:
entity_type_id = 4
najczęściej są to wpisy EAV produktu. W przypadku konieczności masowej aktualizacji kategorii lub atrybutów klienta może się to różnić, podobnie jak tabela, która jest aktualizowana w zależności od typu atrybutu, który aktualizujesz. Również jeśli masz konfigurację dla wielu sklepów, pamiętaj o tym i zwróć uwagę na warunkistore_id
źródło
Zgodnie z powyższą odpowiedzią Fabiana możesz aktualizować wiele pól jednocześnie. Poniższy przykład ma tylko 2 (w magazynie, stan zapasów), ale możesz użyć ich tyle, ile chcesz.
źródło