Feb 2009: An updated version of the code for CodeIgniter 1.7.x can be found here.
I developed this extension of CodeIgniter’s Model last year, but never had the chance to publish it. The main purpose of this extension is to make a dev’s life easy. This extension has been used by several of my devs at RBS and has been proved to increase productivity and reduce the number of painful small queries to write. Their enthusiasm has driven me to post this for the CI fans out there.
Without much babble, let’s get into point. I’ve explained the process of installing it and then showed some example uses. For starter, click here to download it. Now follow these steps to get started:
1. Replace the system/libraries/Model.php file with the attached Model.php (CodeIgniter version 1.6.3)
2. For each of your tables, you will need to create a model file in system/application/models.
3. Lets say we have a “products” table whose schema is as follows:
1CREATE TABLE `products` (
2 `id` int(11) NOT NULL auto_increment,
3 `title` varchar(50) NOT NULL,
4 `description` text NOT NULL,
5 `color` varchar(20) NOT NULL,
6 `price` float NOT NULL,
7 `category_id` int(11) NOT NULL,
8 `featured` char(1) NOT NULL,
9 `enabled` char(1) NOT NULL,
10 `visits` int(1) NOT NULL,
11 `created` int(11) NOT NULL,
12 `modified` int(11) NOT NULL,
13 PRIMARY KEY (`id`)
14) ENGINE=MyISAM;
4. Now we need to create system/application/models/product.php:
1<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
2
3class Product extends Model
4{
5 function Product()
6 {
7 // Call the Model constructor
8 parent::Model();
9
10 // Load the associated table
11 $this->loadTable('products');
12 }
13}
5. From any controller, you can load the Model as instructed in the CI manual. Here are some sample usage of the model functions:
1function products()
2{
3 // Load the model in the default way
4 $this->load->model('Product');
5
6 // Total # of products
7 echo $this->Product->findCount();
8
9 // Total # of featured products
10 echo $this->Product->findCount("featured = 'Y'");
11
12 // Retrieve ALL the products
13 $allProducts = $this->Product->findAll();
14
15 // Retrive id, title and price of top 10 products (based on popularity) that are enabled
16 $topProducts = $this->Product->findAll("enabled = 'Y'", 'id, title, price', 'visits DESC', '0', '10');
17
18 // Retrive id, title and price of the 1st most popular product that is enabled
19 $topProducts = $this->Product->find("enabled = 'Y'", 'id, title, price', 'visits DESC', '0', '10');
20
21 // Retrieve the product with id = 1
22 $oneProduct = $this->Product->read(1);
23
24 // Retrive the price of the product whose id = 1
25 $productPrice = $this->Product->field('price', 'id = 1');
26
27 // Single array with the titles of all the enabled products
28 $productArr = $this->Product->generateSingleArray("enabled = 'Y'", 'title');
29
30 // Insert a new product in the db
31 $newProductId = $this->Product->insert(array('title' => 'New Product', 'price' => '10.99'));
32
33 // Update the price of the newly added product
34 $updProduct = $this->Product->save(array('price' => '20.00'), $newProductId);
35
36 // Delete the product
37 $this->Product->remove($new_product_id);
38}
7. There are a number of other helpful functions in this file. If you have a careful look, you’ll discover that some of them are really handy.
UPDATE: I forgot to give due credit to the wonderful developers of CakePHP – I’ve taken inspiration from their Model implementation while building this one for CodeIgniter.
Download
MORE UPDATE: Download the version for CodeIgniter 1.7.x here.