更新时间:2023-11-30 09:47:46
集合从类继承
Varien_Data_Collection_Db
该类上有一个名为addOrder
的方法.
There's a method named addOrder
on that class.
public function addOrder($field, $direction = self::SORT_ORDER_DESC)
{
return $this->_setOrder($field, $direction);
}
因此,您认为类似这样的东西应该可以用于基本订购
So, you'd think something like this should work for basic ordering
Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addOrder('entity_id');
但是,事实并非如此.由于EAV集合中涉及的连接复杂,因此有一种特殊的方法可用于向order子句添加属性
However, it doesn't. Because of the complex joining involved in EAV Collections, there's a special method used to add an attribute to the order clause
Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection::addAttributeToSort
不过,这只能用于添加简单属性.要创建任意排序,您需要直接操作Zend_Select
对象.我不喜欢这样做,也不喜欢使用自定义mysql函数来实现目标,但这似乎是实现此目的的唯一方法
However again, this can only be used to add simple attributes. To create an arbitrary sort, you'll need to manipulate the Zend_Select
object directly. I'm not a big fan of this, and I'm not a big fan of using custom mysql functions to achieve things, but it appears it's the only way to do this
我在库存安装中测试了以下代码,并获得了预期的结果.您应该能够使用它来获取所需的内容.
I tested the following code on a stock install and got the desired results. You should be able to use it to get what you want.
$ids = array(16,18,17,19);
$products = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('entity_id',$ids);
//shakes fist at PDO's array parameter
$ids = array_map('intval', $ids);
$products->getSelect()->order("find_in_set(e.entity_id,'".implode(',',$ids)."')");
foreach($products as $product)
{
var_dump($product->getEntityId());
var_dump($product->getSku());
}