1 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns=
"http://www.w3.org/1999/xhtml" xml:
lang=
"en" lang=
"en">
5 <meta http-equiv=
"Content-Type" content=
"text/html; charset=utf-8" />
6 <title>Models : CodeIgniter User Guide
</title>
8 <style type='text/css' media='all'
>@import url('../userguide.css');
</style>
9 <link rel='stylesheet' type='text/css' media='all' href='../userguide.css'
/>
11 <script type=
"text/javascript" src=
"../nav/nav.js"></script>
12 <script type=
"text/javascript" src=
"../nav/prototype.lite.js"></script>
13 <script type=
"text/javascript" src=
"../nav/moo.fx.js"></script>
14 <script type=
"text/javascript" src=
"../nav/user_guide_menu.js"></script>
16 <meta http-equiv='expires' content='-
1'
/>
17 <meta http-equiv= 'pragma' content='no-cache'
/>
18 <meta name='robots' content='all'
/>
19 <meta name='author' content='ExpressionEngine Dev Team'
/>
20 <meta name='description' content='CodeIgniter User Guide'
/>
24 <!-- START NAVIGATION -->
25 <div id=
"nav"><div id=
"nav_inner"><script type=
"text/javascript">create_menu('../');
</script></div></div>
26 <div id=
"nav2"><a name=
"top"></a><a href=
"javascript:void(0);" onclick=
"myHeight.toggle();"><img src=
"../images/nav_toggle_darker.jpg" width=
"154" height=
"43" border=
"0" title=
"Toggle Table of Contents" alt=
"Toggle Table of Contents" /></a></div>
28 <table cellpadding=
"0" cellspacing=
"0" border=
"0" style=
"width:100%">
30 <td><h1>CodeIgniter User Guide Version
2.1.3</h1></td>
31 <td id=
"breadcrumb_right"><a href=
"../toc.html">Table of Contents Page
</a></td>
35 <!-- END NAVIGATION -->
38 <!-- START BREADCRUMB -->
39 <table cellpadding=
"0" cellspacing=
"0" border=
"0" style=
"width:100%">
42 <a href=
"http://codeigniter.com/">CodeIgniter Home
</a> ›
43 <a href=
"../index.html">User Guide Home
</a> ›
46 <td id=
"searchbox"><form method=
"get" action=
"http://www.google.com/search"><input type=
"hidden" name=
"as_sitesearch" id=
"as_sitesearch" value=
"codeigniter.com/user_guide/" />Search User Guide
<input type=
"text" class=
"input" style=
"width:200px;" name=
"q" id=
"q" size=
"31" maxlength=
"255" value=
"" /> <input type=
"submit" class=
"submit" name=
"sa" value=
"Go" /></form></td>
49 <!-- END BREADCRUMB -->
54 <!-- START CONTENT -->
59 <p>Models are
<strong>optionally
</strong> available for those who want to use a more traditional MVC approach.
</p>
64 <li><a href=
"#what">What is a Model?
</a></li>
65 <li><a href=
"#anatomy">Anatomy of a Model
</a></li>
66 <li><a href=
"#loading">Loading a Model
</a></li>
67 <li><a href=
"#auto_load_model">Auto-Loading a Model
</a> </li>
68 <li><a href=
"#conn">Connecting to your Database
</a></li>
73 <h2><a name=
"what"></a>What is a Model?
</h2>
75 <p>Models are PHP classes that are designed to work with information in your database. For example, let's say
76 you use CodeIgniter to manage a blog. You might have a model class that contains functions to insert, update, and
77 retrieve your blog data. Here is an example of what such a model class might look like:
</p>
80 class
Blogmodel
extends
CI_Model
{
<br />
82 var $title
= '';
<br />
83 var $content = '';
<br />
84 var $date
= '';
<br />
86 function
__construct()
<br />
87 {
<br />
88 // Call the Model constructor
<br />
89 parent::__construct();
<br />
90 }
<br />
91 <br />
92 function
get_last_ten_entries()
<br />
93 {
<br />
94 $query = $this-
>db-
>get('entries',
10);
<br />
95 return $query-
>result();
<br />
96 }
<br />
98 function
insert_entry()
<br />
99 {
<br />
100 $this-
>title
= $_POST['title']; // please read the below note
<br />
101 $this-
>content = $_POST['content'];
<br />
102 $this-
>date
= time();
<br />
104 $this-
>db-
>insert('entries',
$this);
<br />
105 }
<br />
107 function
update_entry()
<br />
108 {
<br />
109 $this-
>title
= $_POST['title'];
<br />
110 $this-
>content = $_POST['content'];
<br />
111 $this-
>date
= time();
<br />
113 $this-
>db-
>update('entries',
$this, array('id' =
> $_POST['id']));
<br />
114 }
<br />
118 <p>Note: The functions in the above example use the
<a href=
"../database/active_record.html">Active Record
</a> database functions.
</p>
119 <p class=
"important"><strong>Note:
</strong> 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
<a href=
"../libraries/input.html">Input Class
</a> $this-
>input-
>post('title')
</p>
120 <h2><a name=
"anatomy"></a>Anatomy of a Model
</h2>
122 <p>Model classes are stored in your
<dfn>application/models/
</dfn> folder. They can be nested within sub-folders if you
123 want this type of organization.
</p>
125 <p>The basic prototype for a model class is this:
</p>
129 class
<var>Model_name
</var> extends
CI_Model
{
<br />
131 function
<var>__construct
</var>()
<br />
132 {
<br />
133 parent::__construct();
<br />
134 }
<br />
137 <p>Where
<var>Model_name
</var> is the name of your class. Class names
<strong>must
</strong> have the first letter capitalized with the rest of the name lowercase.
138 Make sure your class extends the base Model class.
</p>
140 <p>The file name will be a lower case version of your class name. For example, if your class is this:
</p>
143 class
<var>User_model
</var> extends
CI_Model
{
<br />
145 function
<var>__construct
</var>()
<br />
146 {
<br />
147 parent::__construct();
<br />
148 }
<br />
151 <p>Your file will be this:
</p>
153 <code>application/models/
<var>user_model.php
</var></code>
157 <h2><a name=
"loading"></a>Loading a Model
</h2>
159 <p>Your models will typically be loaded and called from within your
<a href=
"controllers.html">controller
</a> functions.
160 To load a model you will use the following function:
</p>
162 <code>$this-
>load-
>model('
<var>Model_name
</var>');
</code>
164 <p>If your model is located in a sub-folder, include the relative path from your models folder. For example, if
165 you have a model located at
<dfn>application/models/blog/queries.php
</dfn> you'll load it using:
</p>
167 <code>$this-
>load-
>model('
<var>blog/queries
</var>');
</code>
170 <p>Once loaded, you will access your model functions using an object with the same name as your class:
</p>
173 $this-
>load-
>model('
<var>Model_name
</var>');
<br />
175 $this-
><var>Model_name
</var>-
>function();
178 <p>If you would like your model assigned to a different object name you can specify it via the second parameter of the loading
183 $this-
>load-
>model('
<var>Model_name
</var>', '
<kbd>fubar
</kbd>');
<br />
185 $this-
><kbd>fubar
</kbd>-
>function();
188 <p>Here is an example of a controller, that loads a model, then serves a view:
</p>
191 class
Blog_controller
extends
CI_Controller
{
<br />
193 function
blog()
<br />
194 {
<br />
195 $this-
>load-
>model('Blog');
<br />
197 $data['query'] = $this-
>Blog-
>get_last_ten_entries();
<br /><br />
198 $this-
>load-
>view('blog', $data);
<br />
199 }
<br />
202 <h2><a name=
"auto_load_model" id=
"auto_load_model"></a>Auto-loading Models
</h2>
203 <p>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.
</p>
206 <h2><a name=
"conn"></a>Connecting to your Database
</h2>
208 <p>When a model is loaded it does
<strong>NOT
</strong> connect automatically to your database. The following options for connecting are available to you:
</p>
211 <li>You can connect using the standard database methods
<a href=
"../database/connecting.html">described here
</a>, either from within your Controller class or your Model class.
</li>
212 <li>You can tell the model loading function to auto-connect by passing
<kbd>TRUE
</kbd> (boolean) via the third parameter,
213 and connectivity settings, as defined in your database config file will be used:
215 <code>$this-
>load-
>model('
<var>Model_name
</var>', '',
<kbd>TRUE
</kbd>);
</code>
219 <li>You can manually pass database connectivity settings via the third parameter:
222 <code>$config['hostname'] = "localhost";
<br />
223 $config['username'] = "myusername";
<br />
224 $config['password'] = "mypassword";
<br />
225 $config['database'] = "mydatabase";
<br />
226 $config['dbdriver'] = "mysql";
<br />
227 $config['dbprefix'] = "";
<br />
228 $config['pconnect'] = FALSE;
<br />
229 $config['db_debug'] = TRUE;
<br />
231 $this-
>load-
>model('
<var>Model_name
</var>', '',
<kbd>$config
</kbd>);
</code></li>
241 Previous Topic:
<a href=
"views.html">Views
</a>
242 ·
243 <a href=
"#top">Top of Page
</a> ·
244 <a href=
"../index.html">User Guide Home
</a> ·
245 Next Topic:
<a href=
"helpers.html">Helpers
</a>
247 <p><a href=
"http://codeigniter.com">CodeIgniter
</a> · Copyright
© 2006 -
2012 · <a href=
"http://ellislab.com/">EllisLab, Inc.
</a></p>