几乎所有 Magento 模型都有一个相应的 Collection 对象,可用于获取模型的多个实例。
要实例化 Product 集合,请执行以下操作
$collection = Mage::getModel('catalog/product')->getCollection();
产品是 Magento EAV 样式模型,因此您需要添加要返回的任何其他属性。
$collection = Mage::getModel('catalog/product')->getCollection();
//fetch name and orig_price into data
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
有多种语法可用于在集合上设置过滤器。我总是使用下面的详细方法,但您可能需要检查 Magento 源代码以了解可以使用过滤方法的其他方式。
下面展示了如何按值范围(大于和小于)进行过滤
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
//filter for products whose orig_price is greater than (gt) 100
$collection->addFieldToFilter(array(
array('attribute'=>'orig_price','gt'=>'100'),
));
//AND filter for products whose orig_price is less than (lt) 130
$collection->addFieldToFilter(array(
array('attribute'=>'orig_price','lt'=>'130'),
));
虽然这将按等于一件事或另一件事的名称进行过滤。
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
//filter for products who name is equal (eq) to Widget A, or equal (eq) to Widget B
$collection->addFieldToFilter(array(
array('attribute'=>'name','eq'=>'Widget A'),
array('attribute'=>'name','eq'=>'Widget B'),
));
支持的短条件(eq、lt 等)的完整列表可以在_getConditionSql
中的方法lib/Varien/Data/Collection/Db.php
最后,所有 Magento 集合都可以迭代(基集合类实现迭代器接口)。设置过滤器后,您将通过这种方式获取产品。
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
//filter for products who name is equal (eq) to Widget A, or equal (eq) to Widget B
$collection->addFieldToFilter(array(
array('attribute'=>'name','eq'=>'Widget A'),
array('attribute'=>'name','eq'=>'Widget B'),
));
foreach ($collection as $product) {
//var_dump($product);
var_dump($product->getData());
}