# CodeIgniter 用户指南 版本 2.2.0

编辑文档、查看近期更改请 登录 或 注册 找回密码

搜索用户指南

查看原文

# 模型

模型对于那些想用传统MVC方式的人来说是可选的。

- 什么是模型?
- 剖析模型
- 载入模型
- 自动载入模型
- 连接数据库

## 什么是模型?

模型是专门用来和数据库打交道的PHP类。例如，假设你想用CodeIgniter来做一个Blog。你可以写一个模型类，里面包含插入、更新、删除Blog数据的方法。下面的例子将向你展示一个普通的模型类:

`class Blogmodel extends CI_Model {
var $title = '';
var $content = '';
var $date = '';
function __construct()
{
parent::__construct();
}
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 CI_Model {
function __construct()
{
parent::__construct();
}
}`

Model_name 是模型类的名字。 类名的首字母必须大写，其他字母小写。 并且确保你的类继承了基本模型类(Base Model Class)。

文件名应该是模型类名的小写版。比如，如果你的类是:

`class User_model extends CI_Model {
function __construct()
{
parent::__construct();
}
}`

类的文件名应该是：

`application/models/user_model.php`

## 载入模型

模型可以在 控制器 中被引用。 就像这样:

`$this->load->model('Model_name');`

如果模型文件在子文件夹下，引用的时候要带上相对路径名。例如：如果你有一个模型 application/models/blog/queries.php。 下面的代码可以引用它:

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

模型一旦被载入，你就能通过下面的方法使用它:

`$this->load->model('Model_name');
$this->Model_name->function();`

在默认的情况下模型名称就直接被引入作为对象名，就如上面所示。当然，如果你愿意，可以起个更好记的对象名！那么，可以在加载模型函数中指定第二个参数来设定，例如：

`$this->load->model('Model_name', '`fubar`');
$this->`fubar`->function();`

这里有个控制器的例子，加载一个模型，然后通过视图显示出来

`class Blog_controller extends CI_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 文件，然后在自动装载数组中添加上这个模型。

备注: 经过测试(以加载一个模型为例)自动加载模型和手动载入模型时，消耗的内存情况是一样的！但是当加载模型越多消耗内存就会越大。自动加载模型是要牺牲内存消耗换取的，所以尽量不要自动加载不必要贯穿全站项目的模型！

## 连接到数据库

当一个模型被载入时，它并不会自动连接数据库。以下方法可以使您连接数据库:

- 您可以使用标准方法来连接数据库（说明）, 也可以通过控制器或者您的自定义模型。
- 您可以把第三个参数设置为TRUE来使模型装载函数自动连接数据库，连接配置可以在您的数据库配置文件中可以定义:
`$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`);`

备注: 经过友好链接测试（也即只连接数据库不涉及查询），自动连接数据库和手动连接数据库时，消耗的内存情况是一样的，我本人的本机测试是0.67M

翻译贡献者: analyzer, crazyant_ps2, Hex, levin, liuhuyydy, li_star, longbill, longjianghu, ripen, shishirui, soyota, tinsn
最后修改: 2014-06-10 13:37:44