Question

Objectif:Récupérer une collection de produits qui ont un certain attribut

Voici ce que j'essaie:

public function Hydrate($attribute)
{
    $this->id = Mage::helper('myHelper')->CamelCase($attribute->getFrontendLabel());
    $this->name = $attribute->getFrontendLabel();

    $products = Mage::getModel('catalog/product')
        ->getCollection()
        ->addAttributeToSelect('*')
        ->addFieldToFilter($attribute->getAttributeCode(),array('like' => '%%'))
        ->load();

    foreach ($products as $product)
    {
        array_push($this->collection,Mage::getModel('myModels/Json_Product')->Hydrate($product));
    }



    return Mage::helper('myHelper')->ConvertToJson($this);
}

C'est le travail.Cependant, Je me demandais juste si c'addFieldToFilter() va avoir des conséquences que je ne peux pas actuellement voir?

Magento 1.9.x

Était-ce utile?

La solution

LIKE n'est pas le plus performant choix.Depuis %% (ce qui est équivalent à %) correspond à toutes les chaînes, même les cordes à vide, vous voulez probablement pour vérifier si le champ est NOT NULL.

Le bon filtre de paramètre dans ce cas est:

    ->addFieldToFilter($attribute->getAttributeCode(),array('notnull' => true))

Autres conseils

ici , vous pouvez voir une question protégée à ce sujetmontrant comment effectuer ce dont vous avez besoin.

essentiellement en utilisant

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');  
$collection->addAttributeToSelect('orig_price');    

//filter for products whose orig_price is greater than (gt) 100
$collection->addFieldToFilter(array(
    array('attribute'=>'orig_price','gt'=>'100'),
));

devrait faire le tour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top