CodeIgniter 使用手冊版本 2.2.0


模型(Models)

對於要使用更傳統的MVC取向的人而言,模型(Models)是非必須的

什麼是模型(Model)?

模型(Models)是設計來處理你資料庫中資訊的類別。 例如,假設你用CodeIgniter來管理部落格,你也許會有一個包含新增、更新以及取得部落格資料等功能的模型類別。 舉例來說,這樣的模型類別或許看起來會像:

class Blogmodel extends CI_Model {

    var $title   = '';
    var $content = '';
    var $date    = '';

    function __construct()
    {
        // 呼叫模型(Model)的建構函數
        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變數。這通常是不好的做法,更常見的做法是使用 Input Class: $this->input->post('title')

模型(Model)剖析

模型(Model)類別放在你的application/models/目錄中。它們允許用子目錄來做巢狀,如果你要用這種方式來組織的話。

模型(model)類別的基本原型是:

class Model_name extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }
}

在此Model_name是你的類別名稱。類別名稱必須第一個字母大寫其餘的字母小寫。 確認你的類別繼承(extends)基本的Model類別。

檔案名稱是全部小寫的類別名稱。舉個例子,假設你的類別如下:

class User_model extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }
}

你的檔案會是:

application/models/user_model.php

模型(Model)載入

你的模型(models)只有在你的控制器(controller)函數中才會被載入及呼叫。 要載入一個模型(model)你要用以下的函數:

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

如果你的模型(model)放在一個子目錄中,要加上相對於模型(models)目錄的相對路徑。例如, 如果你的模型(model)放在application/models/blog/queries.php,你要這樣載入:

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

一旦載入了,你就可以使用與類別同名的物件來存取模型(model)函數:

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

$this->Model_name->function();

如果你要將模型(model)指定一個不同的物件名稱,你可以透過載入函數的第二個參數來做:

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

$this->fubar->function();

這裡有個控制器(controller)範例,它會載入一個模型(model),然後備置一個檢視(view):

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);
    }
}

模型(Model)自動載入

如果你發現你需要範圍遍及整個應用的特別模型(model),你可以告訴CodeIgniter在系統初始化的時候自動載入它。 這可由開啟 application/config/autoload.php 檔案並把這個模型(model)加入autoload陣列做到。

連接到你的資料庫

當一個模型(model)載入時,它不會自動連接到你的資料庫。以下為你可以使用的連接選項: