Question

I'm filtering a product collection by the custom attribute ean with the following code

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('ean');
$collection->addFieldToFilter('ean', '678678');

foreach ($collection as $product)
{
     Mage::Log('product found');
}

There is product with this ean but no product is found.

Was it helpful?

Solution

The methods addFieldToFilter() and addAttributeToFilter() are the same.

/app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php:339
/**
 * Wrapper for compatibility with Varien_Data_Collection_Db
 *
 * @param mixed $attribute
 * @param mixed $condition
 */
public function addFieldToFilter($attribute, $condition = null)
{
    return $this->addAttributeToFilter($attribute, $condition);
}

I would try to remove the filter, then loop over the collection and check the values of ean. What query is fired?

Maybe some observer hooks into catalog_product_collection_load_before and the query is altered and filters are added?

Load the collection and then check echo (string)$collection->getSelect(). After(!) the ->load().

OTHER TIPS

try and use

$collection->addAttributeToFilter('ean', '678678');

This post gives some nice pointers on using collections

Maybe this:

$collection->addFieldToFilter('ean', '678678');

should be:

$collection->addAttributeToFilter('ean', '678678');
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top