Obtenez de produit filtre de collection par si l'attribut existe?
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
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