模型对于那些想用传统MVC方式的人来说是可选的。
模型是专门用来和数据库打交道的PHP类。例如,假设你想用CodeIgniter来做一个Blog。你可以写一个模型类,里面包含插入、更新、删除Blog数据的方法。下面的例子将向你展示一个普通的模型类:
class Blogmodel extends Model {
var $title = '';
var $content = '';
var $date = '';
function Blogmodel()
{
// Call the Model constructor for PHP4
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']));
}
}
注意: 上面用到的函数是 Active Record 数据库函数.
备注: 为了简单一点,我们直接使用了$_POST。不过,这不太好,平时我们应该使用 输入类:$this->input->post('title')
模型类文件存放在 application/models/ 文件夹。 如果你愿意,可以在里面建立子文件夹。
最基本的模型类必须像这样:
class Model_name extends Model {
function Model_name()
{
parent::Model();
}
}
Model_name 是模型类的名字。 类名的首字母必须大写,其他字母小写。并且确保你的类继承了基本模型类(Base Model Class)。
文件名应该是模型类名的小写版。比如,如果你的类是:
class User_model extends Model {
function User_model()
{
parent::Model();
}
}
类的文件名应该是:
application/models/user_model.php
模型可以在 controller 中被引用。就像这样:
$this->load->model('Model_name');
如果模型文件在子文件夹下,引用的时候要带上相对路径名。例如:如果你有一个模型 application/models/blog/queries.php。下面的代码可以引用它:
$this->load->model('blog/queries');
模型一旦被载入,你就能通过下面的方法使用它:
$this->load->model('Model_name');
$this->Model_name->function();
如果你想给你的model指派一个不同的对象名,可以在加载模型函数中指定第二个参数:
$this->load->model('Model_name', 'fubar');
$this->fubar->function();
这里有个控制器的例子,加载一个模型,然后通过视图显示出来
class Blog_controller extends Controller {
function blog()
{
$this->load->model('Blog');
$data['query'] = $this->Blog->get_last_ten_entries();
$this->load->view('blog', $data);
}
}
如果您需要一个在整个项目中都起作用的特定模型,您可以让 CodeIgniter 在初始化时自动装载它。实现的方法是打开 application/config/autoload.php 文件,然后在自动装载数组中添加上这个模型。
当一个模型被载入时,它并不会自动连接数据库。以下方法可以使您连接数据库:
$this->load->model('Model_name', '', TRUE);
$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = "mydatabase";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$this->load->model('Model_name', '', $config);