Je recherche la méthode la plus rapide et fiable pour la mise à jour des attributs de masse. Voici les méthodes que je connais, mais je ne sais pas avec quoi je dois aller.
$store_id = 0;
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($product_id),
array('attribute_code' => $attribute_code),
$store_id
);
ou
$product->setData($attribute_code, 1234);
$product->getResource()->saveAttribute($product, $attribute_code);
magento-1.8
magento-enterprise
product-attribute
best-practice
Deepak Mallah
la source
la source
load
. que tout sauf rapide. Par exemple, dans la méthode 2, la première ligne avec la charge de produit est inutile. Vous n'utilisez$product
nulle part.En fait, il existe 3 façons de mettre à jour un attribut sur un produit sans enregistrer le produit complet. Selon le code / les exigences, l'un peut être plus rapide que l'autre.
Méthode 1:
Méthode 2:
Méthode 3: (la plus rapide)
Toutes les méthodes ci-dessus sont beaucoup plus rapides et permettent d'économiser le produit dans son intégralité.
Method 1
:Method 2
:(vous pouvez passer plusieurs produits et plusieurs attributs)
Method 3
:(c'est donc une approche mixte entre la méthode 1 et 2)
La méthode 3 est la plus flexible de toute façon, vous devrez réindexer manuellement ces produits / attributs. (afin de les mettre à jour sur le frontend)
Il peut être utile de mettre à jour rapidement un grand nombre de produits, puis d'appeler la réindexation à la fin.
(si vous utilisez la méthode 2, une réindexation pour chaque produit est appelée après la mise à jour et ces multiples appels ralentissent l'ensemble du processus)
Pour réindexer manuellement un seul produit, voir les fonctions fournies par Mage_Catalog_Model_Product_Flat_Indexer telles que:
updateAttribute($attributeCode, $store = null, $productIds = null)
updateProduct($productIds, $store = null)
la source
catalog_product_entity
.value_id
DEPUIScatalog_product_entity
O ((entity_type_id = 4 AND attribute_id = '68 'AND entity_id = '29') `` ne s'y attendait pas. En cours d'exécution le 1.9.3.2Mise à jour
"Mise à jour massive des attributs" pour les attributs ou les produits?
Pensez à mettre à jour plusieurs attributs est déjà répondu, mais pour les produits, cela peut être utile ...
Si vous souhaitez mettre à jour des produits de la collection, vous ne devriez pas le faire ...
Cela enverra les événements, reconstruira les prix et les indices. Avec cela, aucun événement (et d'autres choses) n'est ignoré et est beaucoup plus rapide.
Pour éviter les mises à jour de prix, vous pouvez ajouter ...
Pour désactiver / activer la réindexation à la volée, jetez un œil à ceci ... https://github.com/Flagbit/Magento-ChangeAttributeSet/commit/676f3af77fec880bc64333403675d183e8639fae
Et vider le cache avant la mise à jour en masse (produit) peut augmenter les performances ...
Quelques chiffres du débogage ici: https://github.com/Flagbit/Magento-ChangeAttributeSet/issues/16
Mage::getSingleton('catalog/product_action')->updateAttributes(...)
ne semble pas être la méthode la plus rapide ... du moins pas avec la configuration mutlistore et les tables plates activées ...saveAttribute()
updateAttributes()
updateAttributes()
(ressource singleton)la source
updateAttributes() (resource singleton)
prend la valeur admin réelle? ou l'id de l'élément déroulant? (en quelque sorte, nous n'obtenons toujours aucune valeur / valeur vide en utilisant cette méthode, c'est-à-dire rien sélectionné