|
This Wiki Article is under construction.
A collection is a Model
type containing other Models
, it is basically used in Magento to handle product lists (ie. from a category or a bundle option), but not only.
TO DO: Explain how Magneto Implements a collection – Use this to explain how magento implements a collection by looking at code in a model, so that people can learn to write their own collections
This is a simple example of loading some product collection from a category and ordering them on their product name using Magento’s API.
-
$collection = Mage::getModel(‘catalog/category’)->load($categoryId)
-
->getProductCollection()
-
->addAttributeToSort(‘name’, ‘ASC’);
To sort using multiple Fields, you can chain calls to the Collection’s method addAttributeToSort
(preferred)
-
$collection = Mage::getModel(‘module/model_name’)->getCollection()
-
->addAttributeToSort(‘order’, ‘ASC’)
-
->addAttributeToSort(‘last_name’, ‘ASC’)
-
->addAttributeToSort(‘first_name’, ‘ASC’)
-
;
TODO: use Magento’s API use cases, not Zend_Db_Select
ones.
You can also pass IF/THEN statements, but be sure to use the proper quotation of your table’s fields.
-
$collection = Mage::getModel(‘module/model_name’)->getCollection();
-
$collection->getSelect()->order( array(‘IF(`order`>0, `order`, 9999) ASC’,
-
‘last_name ASC’, ‘first_name ASC’) );
In this example, the table will be sorted by the order field, then by last name, then by first name, where order is greater than zero, followed by order being equal to or less than zero, all ascending.
Joining Tables
To add SQL joins to a select
-
$collection = Mage::getModel(‘module/model_name’)->getCollection();
-
$collection->getSelect()->join( array(‘table_alias’=>$this->getTable(‘module/table_name’)), ‘main_table.foreign_id = table_alias.primary_key’, array(‘table_alias.*’), ’schema_name_if_different’);
In this example the join method takes an array of alias⇒table_name key pairs, then a standard join clause using `main_table` to refer to the original select, then an array of fields to be retrieved in the join (defaults to *), a different schema can be specified as a last parameter.
→join defaults to an inner join, others can be used:
→joinInner() →joinLeft() →joinRight() →joinFull() →joinCross() →joinNatural()
See lib/Zend/Db/Select.php for source.