Current Interests

Right now I am working with two great PHP frameworks for two different application: Zend Framework and Orchid. Although I'm a huge fan of CodeIgniter, I'm finding ZF to be robust and really solid for becoming the #1 choice of enterprises very soon.

In addition to them, I am also having a good look on Dojo - as it became Zend Framework's official JavaScript toolkit. I have to agree that there a few gems in it which I like, but I'm yet to discover its full potential. In the meantime, jQuery is helping me a lot.

Latest reading

powered by LibraryThing
 
Jul
12

Extended Model for CodeIgniter

  Trackback 
1 Star2 Stars3 Stars4 Stars5 Stars (18 votes, average: 4.78 out of 5)
Loading ... Loading ...

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:

   1: CREATE 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:  
   3:     class 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:  
  14:     }

5. From any controller, you can load the Model as instructed in the CI manual. Here are some sample usage of the model functions:

   1: function 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

Model.php
Extended Model for CodeIgniter
Downloaded: 1254 times
Share and Enjoy:
  • Digg
  • del.icio.us
  • StumbleUpon
  • description
  • Furl
  • Ma.gnolia
  • Technorati
  • Reddit
  • Simpy

Viewing 24 Comments