Я был неправ насчет того, что не так. И все в порядке с базой данных. Проблема заключалась в порядке атрибутов, которые извлекаются из БД.
В Mage_Eav_Model_Entity_Abstract
мы можем найти:
$selects = array();
foreach ($this->getAttributesByTable() as $table=>$attributes) {
$selects[] = $this->_getLoadAttributesSelect($object, $table);
}
if (!empty($selects)) {
$values = $this->_getReadAdapter()->fetchAll(implode(' UNION ', $selects));
foreach ($values as $valueRow) {
$this->_setAttribteValue($object, $valueRow);
}
}
Строка implode(' UNION ', $selects)
объединяет все операторы выбора. Но ORDER BY
нет, поэтому данные могут быть получены в произвольном порядке. На самом деле, для некоторых продуктов это так. Этот выбор принимает значения атрибутов для представления магазина 0 (всегда) и выбранного представления магазина (текущий).
Array $values
содержит массивы со свойствами атрибутов. Порядок имеет значение здесь, потому что если атрибут (например, «имя») для представления магазина, например. 1 будет продолжаться раньше, чем один для представления магазина 0, затем он будет перезаписан.
Решением является добавление предложения ORDER BY
в массив $selects
или сортировку $values
.