Magento - Models, resource models, and collections

Here in this post you will learn how to work with database collection in Magento. As we know that Magento is enrich with MVC (Model – View – Controller). So we will basically starts with some main concepts of models, resource models, and collections.
Basic concepts of models, resource models, and collections

A "model" is used to store data, and perhaps performs some business logics against that data.

A "resource model" is used to interact with the database on behalf of the "model". The "resource model" actually performs the CRUD operations.

A "collection model" holds from one to many "models" and knows how to tell the "resource model" to get rows in the basis of information it is given.

There's a basic ActiveRecord-like/one-object-one-table Model, and there's also an Entity Attribute Value (EAV) Model.
Configure a database connection


Create and register new entities


As we know that Zend_Db and its related classes provide a simple SQL database interface for Zend Framework. The Zend_Db_Adapter is the basic class you use to connect your PHP application to Mysql database.

Here we will use Zend_Db_Adapter_Pdo_Mysql classes to query the Database
$db = new Zend_Db_Adapter_Pdo_Mysql(array(
‘host’ => ‘’,
‘username’ => ‘dbuser’,
‘password’ => ‘xxxxxxxx’,
‘dbname’ => ‘dbname’,
‘profiler’ => true,

Returns to the information of queries.
$profiler = $db->getProfiler();


$sql = ‘SELECT * FROM order WHERE status = ?’;
$stmt = new Zend_Db_Statement_Mysqli($db, $sql);


Each class interacts with one table in the database, and you need to declare the database table for which this class define.
class Orders extends Zend_Db_Table_Abstract
protected $_oname = ‘order’;
$table = new Order(array(‘db’ => $db));

With $table object, you can use some methods to operate with the database such as: insert, update, delete.


This will return the record object in the table

$bugs = new Order();
$row = $bugs->fetchRow($bugs->select()->where(‘order_id = ?’, 1));
$rowArray = $row->toArray();


$select = $db->select()
->from( …specify table and columns… )
->where( …specify search criteria… )
->order( …specify sorting criteria… );

Database collection in Magento

The collection in Magento usually extends from class Mage_Core_Model_Resource_ Collection_Abstract or Mage_Core_Model_Mysql4_ Collection_Abstract. The collection has some methods for you to filter, sort and specify the selected values:

    • addFieldToFilter(,): used to filter data

    • setOrder(): used to sort data

    • getSelect(): returns the selected query (is instance object of class Varien_Db_Select) to this collections. And you are able to use it to add specific selected value.

    • Database resource

      • abstract class Mage_Core_Model_Resource_Abstract

      • abstract class Mage_Core_Model_Mysql4_Abstract

The database model and the collection connect to database through database resource layer. The resource class extends from an abstract class:

In this class, you need to declare your database table and the id field of this table.

For example:
public function _construct(){
$this->_init(‘affiliate/program’, ‘order_id’);

We can also use and resolve existing table names without hard coding them
$resource = Mage::getSingleton(‘core/resource’);
$eavAttributeTable = $resource->getTable(‘eav/attribute’);

"eav/attribute" here is your configuration for table eav_entity_attribute in your database.

Hope it will work for you!


You may like these posts