Подтвердить что ты не робот

Как отсортировать коллекцию в Magento?

Я пытаюсь сортировать коллекцию с помощью 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?

4b9b3361

Ответ 1

Ты на самом деле делаешь это правильно. Однако, поскольку 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

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

Ответ 2

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

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

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