Models
Models are optionally available for those who want to use a more traditional MVC approach.
- What is a Model?
- Anatomy of a Model
- Loading a Model
- Auto-Loading a Model
- Connecting to your Database
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 Blogmodel extends Model {
var $title = '';
var $content = '';
var $date = '';
function Blogmodel()
{
// Call the Model constructor
parent::Model();
}
function get_last_ten_entries()
{
$query = $this->db->get('entries', 10);
return $query->result();
}
function insert_entry()
{
$this->title = $_POST['title'];
$this->content = $_POST['content'];
$this->date = time();
$this->db->insert('entries', $this);
}
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 functions in the above example use the Active Record database functions.
Anatomy of a Model
Model classes are stored in your application/models/ folder. They can be nested within sub-folders if you want this type of organization.
The basic prototype for a model class is this:
class Model_name extends Model {
function Model_name()
{
parent::Model();
}
}
Where Model_name is the name of your class. Class names must be capitalized. Make sure your class extends the base Model class.
The file name will be a lower case version of your class name. For example, if your class is this:
class User_model extends Model {
function User_model()
{
parent::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 functions. To load a model you will use the following function:
$this->load->model('Model_name');
If you model is located in a sub-folder, include the relative path from your models folder. 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 functions using an object with the same name as your class:
$this->load->model('Model_name');
$this->Model_name->function();
If you would like your model assigned to a different object name you can specify it via the second parameter of the loading function:
$this->load->model('Model_name', 'fubar');
$this->fubar->function();
Here is an example of a controller, that loads a model, then serves a view:
class Blog_controller extends Controller {
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 function 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'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['active_r'] = TRUE;
$this->load->model('Model_name', '', $config);