模型對(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
模型可以在控制類中加載并調(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);
}
}
如果你覺(jué)得需要一個(gè)特殊的模型,貫穿整個(gè)應(yīng)用,可以告訴 CodeIgniter 初始化的時(shí)候自動(dòng)加載。實(shí)現(xiàn)的方法是打開(kāi) application/config/autoload.php 文件,然后添加到自動(dòng)加載數(shù)組。
如果一個(gè)模型已經(jīng)加載,但是沒(méi)有自動(dòng)連接到數(shù)據(jù)庫(kù)。下面的連接選項(xiàng)可用:
您可以把第三個(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);