模型(Models)是給傳統 MVC 架構更多 可選地 提供使用。
什麼是 Model?¶
Models 是 PHP 類別,它是被設計來存取資料庫用的。比如說,使用 CodeIgniter 去管理部落格。你可以有一個 Model 類別它包含函式去 insert,update,還有 retrieve 你的部落格資料。這裡有個例子,來看看 Model 類別是怎麼樣的:
class Blog_model extends CI_Model {
public $title;
public $content;
public $date;
public function __construct()
{
parent::__construct();
// Your own constructor code
}
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']));
}
}
Note
在上述例子我們使用 Query Builder 方法去存取資料庫。
Note
為簡單起見,在本實施例中,我們直接地使用 $_POST
。這通常是不好的做法,更好的方法將是使用 Input 函式庫 $this->input->post('title')
。
剖析 Model¶
Model 類別是儲存在 application/models/ 目錄。 它們可以巢狀的包含在子目錄中,如果你想要分類組織了話,這是個好方法。
基本的 Model 類別原型長這樣:
class Model_name extends CI_Model {
public function __construct()
{
parent::__construct();
}
}
這個 Model_name 是你的類別名稱。 類別名稱 一定要 第一個字母大寫的,其餘部分小寫的。請確認你的類別擴展基本的 Model 類別。
檔案名稱要跟類別名稱一樣。例如:
class User_model extends CI_Model {
public function __construct()
{
parent::__construct();
}
}
你的檔案目錄會長這樣:
application/models/User_model.php
載入 Model¶
你的 models 會被呼叫,通過 控制器 Controller 呼叫方法。 用以下方法載入 models:
$this->load->model('model_name');
如果你的 Model 位於子目錄,引入相關的路徑經由 Models 目錄。位於 application/models/blog/Queries.php 你將要讀取它,用法:
$this->load->model('blog/queries');
一旦載入,你會使用一個物件是具有相同於 Model 名稱的物件,它可以執行你 Model 的方法:
$this->load->model('model_name');
$this->model_name->method();
如果你想分配給 Model 不同的名稱,你可以通過傳入的第二個參數指定它:
$this->load->model('model_name', 'foobar');
$this->foobar->method();
這裡是一個 Controller,載入一個 Model 的例子,然後提供給一個 View:
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);
}
}
自動載入 Models¶
如果你想要在整個應用程式中全域加載,並使用某些 model 你可以打開 application/config/autoload.php 檔案,然後增加這些 model 到 $autoload[‘model’] 陣列裡。
連接資料庫¶
當 Model 被載入進來,但是 還沒 自動地連接到資料庫。 提供給您連接資料庫的選項在下面:
您可以連接使用標準資料庫的方法 這裡描述 無論你從 Controller 類別 或 Model 類別連接都可以。
你可以告訴 Model 加載時自動連接資料庫,透過第三個參數傳遞TRUE(Boolean)自動連接和連接設置,在你的資料庫設定文件中定義將被使用:
$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);