Возможно, что если псевдоним, указанный вами для объединенного столбца, фактически совпадает со столбцом в базовой таблице, вы столкнетесь с проблемой.
addAttributeToSort () проверяет столбец в _joinFieldsсначала, и если он найден (что будет в вашем случае), то он вызывает _getAttributeFieldName () для разрешения псевдонима в полностью определенную ссылку на столбец._getAttributeFieldName () проверяет псевдоним в _staticFields ДО того, как он проверяет _joinFields.Это означает, что если у вас есть конфликт, столбцы базовой таблицы выигрывают.
public function addAttributeToSort($attribute, $dir='asc')
{
if (isset($this->_joinFields[$attribute])) {
$this->getSelect()->order($this->_getAttributeFieldName($attribute).' '.$dir);
return $this;
}
if (isset($this->_staticFields[$attribute])) {
$this->getSelect()->order("e.{$attribute} {$dir}");
}
if (isset($this->_joinAttributes[$attribute])) {
$attrInstance = $this->_joinAttributes[$attribute]['attribute'];
$entityField = $this->_getAttributeTableAlias($attribute).'.'.$attrInstance->getAttributeCode();
} else {
$attrInstance = $this->getEntity()->getAttribute($attribute);
$entityField = 'e.'.$attribute;
}
if ($attrInstance) {
if ($attrInstance->getBackend()->isStatic()) {
$this->getSelect()->order($entityField.' '.$dir);
} else {
$this->_addAttributeJoin($attribute, 'left');
if (isset($this->_joinAttributes[$attribute])) {
$this->getSelect()->order($attribute.' '.$dir);
} else {
$this->getSelect()->order($this->_getAttributeTableAlias($attribute).'.value '.$dir);
}
}
}
return $this;
}
protected function _getAttributeFieldName($attributeCode)
{
if (isset($this->_joinAttributes[$attributeCode]['condition_alias'])) {
return $this->_joinAttributes[$attributeCode]['condition_alias'];
}
if (isset($this->_staticFields[$attributeCode])) {
return sprintf('e.%s', $attributeCode);
}
if (isset($this->_joinFields[$attributeCode])) {
$attr = $this->_joinFields[$attributeCode];
return $attr['table'] ? $attr['table'] .'.'.$attr['field'] : $attr['field'];
}
$attribute = $this->getAttribute($attributeCode);
if (!$attribute) {
throw Mage::exception('Mage_Eav', Mage::helper('eav')->__('Invalid attribute name: %s.', $attributeCode));
}
if ($attribute->isStatic()) {
if (isset($this->_joinAttributes[$attributeCode])) {
$fieldName = $this->_getAttributeTableAlias($attributeCode).'.'.$attributeCode;
} else {
$fieldName = 'e.'.$attributeCode;
}
} else {
$fieldName = $this->_getAttributeTableAlias($attributeCode).'.value';
}
return $fieldName;
}
NB : Все это по предположению Magento 1.5, поскольку вы не указали свою версию