鍍金池/ 教程/ PHP/ 模型
模型
歡迎來(lái)到 CodeIgniter
通過(guò) CLI 執(zhí)行 CodeIgniter
自動(dòng)載入資源
初探 CodeIgniter
創(chuàng)建核心系統(tǒng)類
應(yīng)用程序流程圖
安裝指南
CodeIgniter 特性
應(yīng)用性能分析
web 頁(yè)面緩存
公共函數(shù)
安全
處理多環(huán)境
使用 CodeIgniter 庫(kù)
管理你的應(yīng)用程序
創(chuàng)建輔助類
兼容性函數(shù)
開(kāi)始 CodeIgniter
視圖
視圖文件的 PHP 替代語(yǔ)法
結(jié)束語(yǔ)
靜態(tài)頁(yè)面
URI 路由
錯(cuò)誤處理
版本升級(jí)
創(chuàng)建新聞
CodeIgniter URL
讀取新聞
鉤子 - 擴(kuò)展系統(tǒng)核心
設(shè)計(jì)和架構(gòu)目標(biāo)
保留字
疑難解答
下載 CodeIgniter
模式-視圖-控制
輔助函數(shù)
控制器
創(chuàng)建適配器
PHP 開(kāi)發(fā)規(guī)范

模型

模型對(duì)于那些想使用傳統(tǒng)的 MVC 方法的人來(lái)說(shuō)是可選的。

什么是模型

模型是一個(gè) PHP 類,是用來(lái)和數(shù)據(jù)庫(kù)打交道的。例如,我們假設(shè)你使用 CodeIgniter 來(lái)管理你的博客。你應(yīng)該會(huì)有一個(gè)模型類來(lái)插入,更新,檢索博客數(shù)據(jù)。下面的例子將向你展示一個(gè)普通的模型類。

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

}

注意: 上述例子使用的是查詢生成器數(shù)據(jù)庫(kù)方法。

注意: 為了方便,我們直接使用了 $_POST 方法。這不是一個(gè)好方法,平時(shí)我們應(yīng)該使用輸入庫(kù)方法 $this->input->post('title')

剖析模型

模型類文件存放在 application/models/ 文件夾里。如果你想要這種類型的組織,可以在里面創(chuàng)建子文件夾。

最基本的模型類如下:

class Model_name extends CI_Model {

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

}

Model_name 是你的類名。類名首字母必須大寫(xiě)其他字母小寫(xiě)。確保你的類繼承了基本模型類。

文件名必須和類名匹配。例如,假如這是你的類:

class User_model extends CI_Model {

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

}

類的文件名應(yīng)該是:

application/models/User_model.php

加載一個(gè)模型

模型可以在控制類中加載并調(diào)用??梢允褂靡韵路椒▉?lái)加載模型類:

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

如果你的模型在子文件夾中,需要包含模型文件夾的相對(duì)路徑。例如,如果你在 application/models/blog/Queries.php 擁有一個(gè)模型,可以這么加載:

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

一旦加載,你可以使用一個(gè)和你的類同名的對(duì)象來(lái)訪問(wèn)模型方法:

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

$this->model_name->method();

如果你想讓你的模型有不同的對(duì)象名,可以通過(guò)指定加載方法第二個(gè)參數(shù):

$this->load->model('model_name', 'foobar');

$this->foobar->method();

這里有個(gè)控制器的例子,加載一個(gè)模型,然后通過(guò)視圖顯示出來(lái):

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

自動(dòng)加載模型

如果你覺(jué)得需要一個(gè)特殊的模型,貫穿整個(gè)應(yīng)用,可以告訴 CodeIgniter 初始化的時(shí)候自動(dòng)加載。實(shí)現(xiàn)的方法是打開(kāi) application/config/autoload.php 文件,然后添加到自動(dòng)加載數(shù)組。

連接到數(shù)據(jù)庫(kù)

如果一個(gè)模型已經(jīng)加載,但是沒(méi)有自動(dòng)連接到數(shù)據(jù)庫(kù)。下面的連接選項(xiàng)可用:

  • 您可以使用標(biāo)準(zhǔn)方法來(lái)連接數(shù)據(jù)庫(kù), 也可以通過(guò)控制器或者您的模型類。
  • 您可以把第三個(gè)參數(shù)設(shè)置為 TRUE,來(lái)使模型加載函數(shù)自動(dòng)連接數(shù)據(jù)庫(kù),連接配置可以在您的數(shù)據(jù)庫(kù)配置文件中可以定義

    $this->load->model('model_name', '', TRUE);

  • 您可以手動(dòng)設(shè)定第三個(gè)參數(shù),來(lái)加載您的自定義數(shù)據(jù)庫(kù)配置:

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