Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Magento属性值循环跳过第一项_Magento_Loops_Attributes_Foreach - Fatal编程技术网

通过Magento属性值循环跳过第一项

通过Magento属性值循环跳过第一项,magento,loops,attributes,foreach,Magento,Loops,Attributes,Foreach,这是一个ajax文件,运行以下代码: $model = Mage::getModel('catalog/product'); //getting product model foreach ($violins as $k => $v) { $_product = $model->load($v); //getting product object for particular product id $violinmod

这是一个ajax文件,运行以下代码:

$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;
       }
$VIVISON包含一个具有三个产品ID的数组。我的输出会回显第二个和第三个ID的属性值,但不会回显第一个ID

我一点也不明白!为什么它会完全跳过循环中的第一个ID而不回显任何内容,而回显下面的ID却没有问题


属性设置正确,无论我如何重新排列$violins数组中的ID,第一个属性值总是被跳过。我缺少什么?

在Magento中迭代产品集合时,它包含的项目实际上是产品对象实例。考虑到您要完成的任务(获取一个属性),您在这里所做的工作(多次命中数据库,加载所有属性)是不必要的。尝试将属性添加到集合中以开始并在其上迭代:

$coll = Mage::getModel('catalog/product')->getCollection()
                                           ->addAttributeToSelect('Violinmodel');
                                           //be certain that the attribute code is capitalized...

foreach ($coll as $product) {
    //var_dump($product->debug()); //for example
    var_dump($product->getAttributeText('Violinmodel));
}

在循环之外初始化
$model
是不安全的。您可能认为自己在内存和/或函数调用方面效率更高,但这是自找麻烦。此时正在加载
Mage\u Catalog\u Model\u Product
对象,调用
->load()
并不会给您一个新对象,它只是设置现有对象的数据。除此之外,当并非所有数据都被覆盖时,您将获得奇怪的行为(例如,如果ProductA具有Violinmodel属性,而ProductB没有……它将看起来像ProductA.Violinmodel==ProductB.Violinmodel)。因此,您应该始终将模型放入循环中

foreach ($violins as $k => $v) {
    $_product = Mage::getModel('catalog/product')->load($v); //getting product
    if ($_product->getId() == $v) { // sanity check
        $violinmodel = $_product->getAttributeText('Violinmodel'); //grabbing the violinmodel attribute value
        echo $violinmodel;
    }
}
或者,如benmarks所建议的,通过集合加载此数据:

$_products = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToSelect('Violinmodel')
    ->addIdFilter($violins);
foreach ($_products as $_product) {
    echo $_product->getAttributeText('Violinmodel'));
}