+ +
+

Models

+

Models are optionally available for those who want to use a more +traditional MVC approach.

+ +
+

What is a Model?

+

Models are PHP classes that are designed to work with information in +your database. For example, let’s say you use CodeIgniter to manage a +blog. You might have a model class that contains functions to insert, +update, and retrieve your blog data. Here is an example of what such a +model class might look like:

+
class Blog_model extends CI_Model {
+
+        public $title;
+        public $content;
+        public $date;
+
+        public function get_last_ten_entries()
+        {
+                $query = $this->db->get('entries', 10);
+                return $query->result();
+        }
+
+        public function insert_entry()
+        {
+                $this->title    = $_POST['title']; // please read the below note
+                $this->content  = $_POST['content'];
+                $this->date     = time();
+
+                $this->db->insert('entries', $this);
+        }
+
+        public function update_entry()
+        {
+                $this->title    = $_POST['title'];
+                $this->content  = $_POST['content'];
+                $this->date     = time();
+
+                $this->db->update('entries', $this, array('id' => $_POST['id']));
+        }
+
+}
+
+
+
+

Note

+

The methods in the above example use the Query Builder database methods.

+
+
+

Note

+

For the sake of simplicity in this example we’re using $_POST +directly. This is generally bad practice, and a more common approach +would be to use the Input Library +$this->input->post('title').

+
+
+
+

Anatomy of a Model

+

Model classes are stored in your application/models/ directory. +They can be nested within sub-directories if you want this type of +organization.

+

The basic prototype for a model class is this:

+
class Model_name extends CI_Model {
+
+}
+
+
+

Where Model_name is the name of your class. Class names must have +the first letter capitalized with the rest of the name lowercase. Make +sure your class extends the base Model class.

+

The file name must match the class name. For example, if this is your class:

+
class User_model extends CI_Model {
+
+}
+
+
+

Your file will be this:

+
application/models/User_model.php
+
+
+
+
+

Loading a Model

+

Your models will typically be loaded and called from within your +controller methods. To load a model you will use +the following method:

+
$this->load->model('model_name');
+
+
+

If your model is located in a sub-directory, include the relative path +from your models directory. For example, if you have a model located at +application/models/blog/Queries.php you’ll load it using:

+
$this->load->model('blog/queries');
+
+
+

Once loaded, you will access your model methods using an object with the +same name as your class:

+
$this->load->model('model_name');
+
+$this->model_name->method();
+
+
+

If you would like your model assigned to a different object name you can +specify it via the second parameter of the loading method:

+
$this->load->model('model_name', 'foobar');
+
+$this->foobar->method();
+
+
+

Here is an example of a controller, that loads a model, then serves a +view:

+
class Blog_controller extends CI_Controller {
+
+        public function blog()
+        {
+                $this->load->model('blog');
+
+                $data['query'] = $this->blog->get_last_ten_entries();
+
+                $this->load->view('blog', $data);
+        }
+}
+
+
+
+
+

Auto-loading Models

+

If you find that you need a particular model globally throughout your +application, you can tell CodeIgniter to auto-load it during system +initialization. This is done by opening the +application/config/autoload.php file and adding the model to the +autoload array.

+
+
+

Connecting to your Database

+

When a model is loaded it does NOT connect automatically to your +database. The following options for connecting are available to you:

+
    +
  • You can connect using the standard database methods described +here, either from within your +Controller class or your Model class.

    +
  • +
  • You can tell the model loading method to auto-connect by passing +TRUE (boolean) via the third parameter, and connectivity settings, +as defined in your database config file will be used:

    +
    $this->load->model('model_name', '', TRUE);
    +
    +
    +
  • +
  • You can manually pass database connectivity settings via the third +parameter:

    +
    $config['hostname'] = 'localhost';
    +$config['username'] = 'myusername';
    +$config['password'] = 'mypassword';
    +$config['database'] = 'mydatabase';
    +$config['dbdriver'] = 'mysqli';
    +$config['dbprefix'] = '';
    +$config['pconnect'] = FALSE;
    +$config['db_debug'] = TRUE;
    +
    +$this->load->model('model_name', '', $config);
    +
    +
    +
  • +
+
+
+ + +