Как отсортировать коллекцию в Magento? - PullRequest
13 голосов
/ 26 января 2011

Я пытаюсь отсортировать коллекцию по attribute_id. Я думал, что это будет легко, но я не правильно его использую:

$attributes =  Mage::getResourceModel('eav/entity_attribute_collection')
    ->setOrder('attribute_id');
echo $attributes->getSelect();

Результат:

SELECT `main_table`.* FROM `eav_attribute` AS `main_table`

Почему там нет order by?

Ответы [ 2 ]

25 голосов
/ 26 января 2011

Вы на самом деле делаете это правильно.Однако, поскольку Magento использует EAV, для повышения производительности необходимо применять приемы.

Одним из таких приемов является время, используемое для построения возможной строки SQL.Обычно он загружается в последнюю минуту и ​​только когда вы фактически указываете, что хотите получить доступ к данным коллекции, вы можете увидеть полный SQL-код, использованный для создания коллекции.Например, выполнение вашего кода, но подсказка magento о фактическом создании и загрузке коллекции, приводит к ожидаемому результату.

$attributes =  Mage::getResourceModel('eav/entity_attribute_collection')
    ->setOrder('attribute_id');
$attributes->count(); // forces the collection to load
echo $attributes->getSelect()->assemble();

Это приводит к SQL:

SELECT `main_table`.* FROM `eav_attribute` AS `main_table` ORDER BY attribute_id DESC

Итак, вы былиправильный путь, просто Magento делал все возможное, чтобы сбить вас с толку.Это очень хорошо.

4 голосов
/ 26 января 2011

Используйте это вместо $attributes->getSelect();:

$attributes->getSelect()->order('main_table.attribute_id ASC');

Не спрашивай почему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...