目录搜索
欢迎目录快速参考图基本信息服务器要求许可协议变更记录关于CodeIgniter安装下载 CodeIgniter安装指导从老版本升级疑难解答介绍开始CodeIgniter 是什么?CodeIgniter 速记表支持特性应用程序流程图模型-视图-控制器架构目标教程内容提要加载静态内容创建新闻条目读取新闻条目结束语常规主题CodeIgniter URL控制器保留字视图模型辅助函数使用 CodeIgniter 类库创建你自己的类库使用 CodeIgniter 适配器创建适配器创建核心系统类钩子 - 扩展框架的核心自动装载资源公共函数URI 路由错误处理缓存调试应用程序以CLI方式运行管理应用程序处理多环境PHP替代语法安全开发规范类库参考基准测试类日历类购物车类配置类Email 类加密类文件上传类表单验证详解FTP 类图像处理类输入类Javascript 类语言类装载类迁移类输出类分页类模板解析器类安全类Session 类HTML 表格类引用通告类排版类单元测试类URI 类User-Agent 类表单验证XML-RPC 和 XML-RPC 服务器Zip 编码类缓存适配器适配器参考适配器数据库类Active Record 类数据库缓存类自定义函数调用数据库配置连接你的数据库数据库快速入门例子代码字段数据数据库维护类查询辅助函数数据库类查询生成查询记录集表数据事务数据库工具类JavaScript类辅助函数参考数组辅助函数CAPTCHA 辅助函数Cookie Helper日期辅助函数目录辅助函数下载辅助函数Email 辅助函数文件辅助函数表单辅助函数HTML辅助函数Inflector 辅助函数语言辅助函数数字辅助函数路径辅助函数安全辅助函数表情辅助函数字符串辅助函数文本辅助函数排版辅助函数URL 辅助函数XML 辅助函数
文字

CodeIgniter 用户指南 版本 2.1.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, Hex, levin, li_star, longbill, ripen, shishirui, soyota
最后修改: 2012-03-07 14:15:16
上一篇:下一篇: