Magento Eav Collection Bug
piaoling 2012-10-26 10:53:40
When product attribute has no default value, but in a specific store level or website level the attribute has value. When get Product Collection with the store level, it will not get the value.
bug in:
Mage_Catalog_Model_Resource_Eav_Mysql4_Collection_Abstract :: _getLoadAttributesSelect()
$select = $this->getConnection()->select() ->from(array('default'=>$table), array($entityIdField, 'attribute_id', 'default_value'=>'value')) ->joinLeft( array('store'=>$table), $joinCondition, array( 'store_value' => 'value', 'value' => new Zend_Db_Expr('IF(store.value_id>0, store.value, default.value)') ) ) ->where('default.entity_type_id=?', $this->getEntity()->getTypeId()) ->where("default.$entityIdField in (?)", array_keys($this->_itemsById)) ->where('default.attribute_id in (?)', $attributeIds) ->where('default.store_id = 0');It should be :
$select = $this->getConnection()->select() ->from(array('default'=>$table), array($entityIdField, 'attribute_id', 'default_value'=>'value')) ->joinLeft( array('store'=>$table), $joinCondition, array( 'store_value' => 'value', 'value' => new Zend_Db_Expr('IF(store.value_id>0, store.value, default.value)') ) ) ->where('default.entity_type_id=?', $this->getEntity()->getTypeId()) ->where("default.$entityIdField in (?)", array_keys($this->_itemsById)) ->where('default.attribute_id in (?)', $attributeIds) ->where('default.store_id in (0,'.(int) $this->getStoreId().')');
发表评论(评论将通过邮件发给作者):