Причина, по которой вы получаете ошибку, состоит в том, что метод Mage_Sales_Model_Resource_Collection_Abstract::addAttributeToSelect
работает только для отдельных атрибутов, а не для массива атрибутов.
Он работает только для отдельных атрибутов, потому что он проверит вызов, чтобы убедиться, что атрибут реален.
public function addAttributeToSelect($attribute)
{
$this->addFieldToSelect($this->_attributeToField($attribute));
return $this;
}
Когда вы смотрите в себя, Mage_Sales_Model_Resource_Collection_Abstract::_attributeToField
вы видите, что это работает следующим образом.
- Если вы передадите строку, она просто вернет строку,
- Если вы передадите объект, он подтвердит, что это объект типа,
Mage_Eav_Model_Entity_Attribute
и вернет код атрибута,
Код выглядит следующим образом:
protected function _attributeToField($attribute)
{
$field = false;
if (is_string($attribute)) {
$field = $attribute;
} elseif ($attribute instanceof Mage_Eav_Model_Entity_Attribute) {
$field = $attribute->getAttributeCode();
}
if (!$field) {
Mage::throwException(Mage::helper('sales')->__('Cannot determine the field name.'));
}
return $field;
}
Таким образом, вы видите следующие варианты:
- Просто позвоните
addFieldToSelect
с массивом кодов атрибутов. Поскольку вы только передаете коды, а не объекты, вы не получите подтверждение, но, возможно, вам это не нужно в вашем случае.
- Вызовите
addAttributeToSelect
один раз для каждого атрибута.
Я хотел бы предложить в вашем случае вариант один будет лучшим.