# [模型](http://codeigniter.org.cn/user_guide/general/models.html#id8)
模型对于那些想使用更传统的 MVC 模式的人来说是可选的。
目录
[TOC=2,2]
## 什么是模型?
模型是专门用来和数据库打交道的 PHP 类。例如,假设你使用 CodeIgniter 管理一个博客,那么你应该会有一个用于插入、更新以及获取博客数据的模型类。 这里是一个模型类的例子:
~~~
class Blog_model extends CI_Model {
public $title;
public $content;
public $date;
public function __construct()
{
// Call the CI_Model constructor
parent::__construct();
}
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']));
}
}
~~~
>[info] 注解
> 上面的例子中使用了 [查询构造器](http://codeigniter.org.cn/user_guide/database/query_builder.html) 数据库方法。
>[info] 注解
> 为了保证简单,我们在这个例子中直接使用了 $_POST 数据,这其实是个不好的实践, 一个更通用的做法是使用 [输入库](http://codeigniter.org.cn/user_guide/libraries/input.html) 的$this->input->post('title')。
## [剖析模型](http://codeigniter.org.cn/user_guide/general/models.html#id10)
模型类位于你的 **application/models/** 目录下,如果你愿意,也可以在里面创建子目录。
模型类的基本原型如下:
~~~
class Model_name extends CI_Model {
public function __construct()
{
parent::__construct();
}
}
~~~
其中,**Model_name** 是类的名字,类名的第一个字母 **必须** 大写,其余部分小写。确保你的类 继承 CI_Model 基类。
文件名和类名应该一致,例如,如果你的类是这样:
~~~
class User_model extends CI_Model {
public function __construct()
{
parent::__construct();
}
}
~~~
那么你的文件名应该是这样:
~~~
application/models/User_model.php
~~~
## 加载模型
你的模型一般会在你的 [控制器](http://codeigniter.org.cn/user_guide/general/controllers.html) 的方法中加载并调用, 你可以使用下面的方法来加载模型:
~~~
$this->load->model('model_name');
~~~
如果你的模型位于一个子目录下,那么加载时要带上你的模型所在目录的相对路径, 譬如,如果你的模型位于 application/models/blog/Queries.php, 你可以这样加载它:
~~~
$this->load->model('blog/queries');
~~~
加载之后,你就可以通过一个和你的类同名的对象访问模型中的方法。
~~~
$this->load->model('model_name');
$this->model_name->method();
~~~
如果你想将你的模型对象赋值给一个不同名字的对象,你可以使用 $this->load->model() 方法的第二个参数:
~~~
$this->load->model('model_name', 'foobar');
$this->foobar->method();
~~~
这里是一个例子,该控制器加载一个模型,并处理一个视图:
~~~
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);
}
}
~~~
## 模型的自动加载
如果你发现你有一个模型需要在整个应用程序中使用,你可以让 CodeIgniter 在系统初始化时自动加载它。打开 **application/config/autoload.php** 文件, 并将该模型添加到 autoload 数组中。
## 连接数据库
当模型加载之后,它 **并不会** 自动去连接你的数据库,下面是一些关于 数据库连接的选项:
* 你可以在控制器或模型中使用 [标准的数据库方法](http://codeigniter.org.cn/user_guide/database/connecting.html) 连接数据库。
* 你可以设置第三个参数为 TRUE 让模型在加载时自动连接数据库,会使用你的数据库配置文件中的配置:
~~~
$this->load->model('model_name', '', TRUE);
~~~
* 你还可以通过第三个参数传一个数据库连接配置:
~~~
$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);
~~~
- 欢迎使用 CodeIgniter
- 安装说明
- 下载 CodeIgniter
- 安装说明
- 从老版本升级
- 疑难解答
- CodeIgniter 概览
- CodeIgniter 将从这里开始
- CodeIgniter 是什么?
- 支持特性
- 应用程序流程图
- 模型-视图-控制器
- 设计与架构目标
- 教程 - 内容提要
- 加载静态内容
- 读取新闻条目
- 创建新闻条目
- 结束语
- 常规主题
- CodeIgniter URL
- 控制器
- 保留名称
- 视图
- 模型
- 辅助函数
- 使用 CodeIgniter 类库
- 创建类库
- 使用 CodeIgniter 驱动器
- 创建驱动器
- 创建核心系统类
- 创建附属类
- 钩子 - 扩展框架核心
- 自动加载资源
- 公共函数
- 兼容性函数
- URI 路由
- 错误处理
- 网页缓存
- 程序分析
- 以 CLI 方式运行
- 管理你的应用程序
- 处理多环境
- 在视图文件中使用 PHP 替代语法
- 安全
- PHP 开发规范
- 类库参考
- 基准测试类
- 缓存驱动器
- 日历类
- 购物车类
- 配置类
- Email 类
- 加密类
- 加密类(新版)
- 文件上传类
- 表单验证类
- FTP 类
- 图像处理类
- 输入类
- Javascript 类
- 语言类
- 加载器类
- 迁移类
- 输出类
- 分页类
- 模板解析类
- 安全类
- Session 类
- HTML 表格类
- 引用通告类
- 排版类
- 单元测试类
- URI 类
- 用户代理类
- XML-RPC 与 XML-RPC 服务器类
- Zip 编码类
- 数据库参考
- 数据库快速入门: 示例代码
- 数据库配置
- 连接你的数据库
- 查询
- 生成查询结果
- 查询辅助函数
- 查询构造器类
- 事务
- 数据库元数据
- 自定义函数调用
- 数据库缓存类
- 数据库工厂类
- 数据库工具类
- 数据库驱动器参考
- 辅助函数参考
- 数组辅助函数
- 验证码辅助函数
- Cookie 辅助函数
- 日期辅助函数
- 目录辅助函数
- 下载辅助函数
- 邮件辅助函数
- 文件辅助函数
- 表单辅助函数
- HTML 辅助函数
- 语言辅助函数
- Inflector 辅助函数
- 数字辅助函数
- 路径辅助函数
- 安全辅助函数
- 表情辅助函数
- 字符串辅助函数
- 文本辅助函数
- 排版辅助函数
- URL 辅助函数
- XML 辅助函数
- 向 CodeIgniter 贡献你的力量