2010-09-23 14 views
1

J'ai créé un script de mise à jour d'inventaire - où je récupère une collection de produits dans Magento et parcourez le jeu de résultats, mettant à jour l'inventaire des produits (basé sur un flux d'inventaire séparé).Dans Magento, comment filtrer une collection de produits par le champ manage_stock?

Je peux aller chercher la collection de produits sans problème.

Cependant, je veux seulement obtenir des produits qui ont le champ "Manage Stock" (une liste déroulante dans l'admin sous l'onglet "inventaire") mis à "oui".

J'essayé:

// get all magento catalog products with "manage stock" field set to yes 
$items = Mage::getModel('catalog/product')->getCollection(); 
$items 
->addAttributeToSelect(array(
    'id', 
    'sku' 
)) 
->addFieldToFilter(array(
    array(
    'attribute' => 'manage_stock', 
    'eq' => '1' 
), 
)); 

Mais, obtenir une erreur:

nom d'attribut non valide: manage_stock. au lieu

Répondre

4

Hey Matt, d'utiliser le addFieldToFilter vous devrez probablement utiliser soemthing comme ce

$items->joinField('manages_stock','cataloginventory/stock_item','use_config_manage_stock','product_id=entity_id','{{table}}.use_config_manage_stock=1'); 

manage_stock n'est pas un attribut sur un produit mais sur l'élément de stock réel.

MISE À JOUR:

Cela suppose que vos paramètres de configuration ont été configurés pour gérer stock et que personne n'a jamais mis à ne pas utiliser le paramètre de configuration, mais le faire gérer le stock.

J'ai ajouté cette

$items->joinField('manages_stock','cataloginventory/stock_item','use_config_manage_stock','product_id=entity_id','{{table}}.use_config_manage_stock=1 or {{table}}.manage_stock=1'); 

Je pense que cela devrait être correct et représente une erreur de l'utilisateur parce que si vous avez l'ensemble de configuration pour gérer le stock alors si vous ne voulez pas gérer le stock, vous devez simplement dire utilisez les paramètres de configuration, mais un utilisateur pourrait le définir sur Oui sans vérifier cela.

+0

merci dan - cela donnera un coup de feu dans un peu et rendra compte. Bravo – Matt

+0

nice one dan - cela a fait l'affaire. Bravo – Matt

+0

aussi, +1 pour répondre à mon premier q sur stackoverflow! :) – Matt