Przyczyną tego błędu jest to, że metoda Mage_Sales_Model_Resource_Collection_Abstract::addAttributeToSelect
działa tylko dla poszczególnych atrybutów, a nie dla tablicy atrybutów.
Działa tylko w przypadku pojedynczych atrybutów, ponieważ sprawdzi połączenie, aby upewnić się, że atrybut jest prawdziwy.
public function addAttributeToSelect($attribute)
{
$this->addFieldToSelect($this->_attributeToField($attribute));
return $this;
}
Kiedy spojrzysz na Mage_Sales_Model_Resource_Collection_Abstract::_attributeToField
siebie, zobaczysz, że działa to w następujący sposób.
- Jeśli przekażesz ciąg, zwróci on po prostu ciąg,
- Jeśli zdasz obiekt, sprawdzi on, czy jest to obiekt typu
Mage_Eav_Model_Entity_Attribute
i zwróci kod atrybutu,
Kod wygląda następująco:
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;
}
Tak więc opcje, które widzę, są następujące:
- Wystarczy zadzwonić
addFieldToSelect
za pomocą tablicy kodów atrybutów. Ponieważ przekazujesz tylko kody, a nie obiekty, nie dostaniesz walidacji, ale być może nie potrzebujesz tego w twoim przypadku.
- Zadzwoń
addAttributeToSelect
raz dla każdego atrybutu.
Sugerowałbym w twoim przypadku opcję, która byłaby najlepsza.