This is an ajax file running the following code:
$model = Mage::getModel('catalog/product'); //getting product model
foreach ($violins as $k => $v)
{
$_product = $model->load($v); //getting product object for particular product id
$violinmodel = $_product->getAttributeText('Violinmodel'); //grabbing the violinmodel attribute value
echo $violinmodel;
}
$violin contains an array with three product ID’s. My output is echoing the attribute value for the second and third ID’s fine, but is NOT echoing the first ID!
I don’t get this at all! Why would it completely skip the first ID in the loop and not echo anything, while echoing the following ID’s without a problem?
The attributes are set up properly and no matter how I rearrange the ID’s in the $violins array, the first attribute value is always skipped. What am I missing?
Initializing
$modeloutside of your loop is unsafe. You might think that you are being more efficient with memory and/or function calls but you’re asking for trouble. TheMage_Catalog_Model_Productobject is being loaded at that time, and calling->load()isn’t giving you a new object, it’s just setting the data of your existing one. Except, you’ll get strange behavior when not all of the data gets overwritten (for example if ProductA has a Violinmodel attribute and ProductB doesn’t… it will look like ProductA.Violinmodel == ProductB.Violinmodel). For that reason, you should always put your model inside your loop.Or, as benmarks suggested, load this data via a collection: