我正在尝试按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
?
答案 0 :(得分:25)
你实际上是以正确的方式做到了。但是,由于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正在尽最大努力让你迷惑。它非常擅长。
答案 1 :(得分:4)
使用此代替$attributes->getSelect();
:
$attributes->getSelect()->order('main_table.attribute_id ASC');
不要问为什么。