# [模型](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 貢獻你的力量