多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > codeigniter > [PHP]CodeIgniter學習手冊(三):模型Model的介紹與簡單案例

[PHP]CodeIgniter學習手冊(三):模型Model的介紹與簡單案例

來源:程序員人生   發布時間:2014-02-06 14:30:09 閱讀次數:3850次
什么是模型?

模型是專門用來和數據庫打交道的PHP類。例如,假設你想用CodeIgniter來做一個Blog。你可以寫一個模型類,里面包含插入、更新、刪除Blog數據的方法。

下面的例子將向你展示一個普通的模型類:

<?class Blogmodel extends CI_Model {    var $title   = '';    var $content = '';    var $date    = '';    function __construct()    {        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。

不過,這不太好,平時我們應該使用輸類:

$this->input->post('title');


剖析模型

模型類文件存放在 application/models/ 文件夾。 如果你愿意,可以在里面建立子文件夾。
最基本的模型類必須像這樣:
class Model_name extends CI_Model {    function __construct()    {        parent::__construct();    }}

Model_name 是模型類的名字。 類名的首字母必須大寫,其他字母小寫并且確保你的類繼承了基本模型類(Base Model Class)。


文件名應該是模型類名的小寫版。比如,如果你的類是:
class User_model extends CI_Model {    function __construct()    {        parent::__construct();    }}
類的文件名應該是:

application/models/user_model.php


載入模型
模型可以在 控制器 中被引用。 就像這樣:

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

如果模型文件在子文件夾下,引用的時候要帶上相對路徑名。例如:如果你有一個模型 application/models/blog/queries.php。 下面的代碼可以引用它:
$this->load->model('blog/queries');

模型一旦被載入,你就能通過下面的方法使用它:
$this->load->model('Model_name');$this->Model_name->function();

在默認的情況下模型名稱就直接被引入作為對象名,就如上面所示。當然,如果你愿意,可以起個更好記的對象名!那么,可以在加載模型函數中指定第二個參數來設定,例如:
$this->load->model('Model_name', 'fubar');$this->fubar->function();

這里有個控制器的例子,加載一個模型,然后通過視圖顯示出來
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);    }}

自動載入模型
如果您需要一個在整個項目中都起作用的特定模型,您可以讓 CodeIgniter 在初始化時自動裝載它。實現的方法是打開 application/config/autoload.php 文件,然后在自動裝載數組中添加上這個模型。

備注: 經過測試(以加載一個模型為例)自動加載模型和手動載入模型時,消耗的內存情況是一樣的

但是當加載模型越多消耗內存就會越大。自動加載模型是要犧牲內存消耗換取的,所以盡量不要自動加載不必要貫穿全站項目的模型!


連接到數據庫

當一個模型被載入時,它并不會自動連接數據庫。以下方法可以使您連接數據庫:
您可以使用標準方法來連接數據庫(說明), 也可以通過控制器或者您的自定義模型。
您可以把第三個參數設置為TRUE來使模型裝載函數自動連接數據庫,連接配置可以在您的數據庫配置文件中可以定義:
    $this->load->model('Model_name', '', TRUE);

您可以手動設定第三個參數來載入您的自定義數據庫配置:

$config['hostname'] = "localhost";$config['username'] = "myusername";$config['password'] = "mypassword";$config['database'] = "mydatabase";$config['dbdriver'] = "mysql";$config['dbprefix'] = "";$config['pconnect'] = FALSE;$config['db_debug'] = TRUE;$this->load->model('Model_name', '', $config);

下面是我在SAE中連接數據庫使用的Model,封裝了一些常用到的方法,比如Select,Insert等等。

<?class sae_sql_model extends CI_Model {  	var $mysql;    var $sql;    function __construct()    {        parent::__construct();		$this->mysql = new SaeMysql();    }    	/*MySQL的Select查詢函數,函數的參數依次為:	 *1.表名-2.列名-3.開始的行數-4.查詢的函數	 */    function select_limit($table_name,$row_name,$start_row,$row_count)    {		$this->sql = "SELECT ".$row_name." FROM `".$table_name."` LIMIT ".$start_row.",".$row_count."";		$data = $this->mysql->getData($this->sql);		return $data;    }  	/*MySQL的Select查詢函數,函數的參數依次為:	 *1.表名-2.列名-3.查詢的列名-4.查詢的目標	 */	function select_where($table_name,$row_name,$where_row,$target_row)    {		$this->sql = "SELECT ".$row_name." FROM `".$table_name."` WHERE `".$where_row."`="						.$target_row;		$data = $this->mysql->getData($this->sql);		return $data;    }	/*MySQL的Insert插入函數,函數的參數依次為:	 *1.表名-2.插入數據的關聯數組	 */	function insert_into($table_name,$array_data)    {		//$tempKey和$tempValue兩個數組臨時存儲插入的數據		$temp_key_string = "";		$temp_value_string = "";		//遍歷取出關聯數組中的數據并將其存儲在字符串中		foreach($array_data as $key=>$value)		{			$temp_key_string .= "`".$key."`,";			$temp_value_string .= "'".$value."',";		}		//除去末尾的逗號		$temp_key_string = substr($temp_key_string,0,-1);		$temp_value_string = substr($temp_value_string,0,-1);		//組裝Insert的SQL語句		$this->sql = "INSERT INTO `".$table_name."` (".$temp_key_string.") VALUES (".$temp_value_string.");";				//運行Insert的SQL語句		$this->mysql->run_sql($this->sql);    }	//測試輸出的函數    function select_output($array_data,$row_name)    {		foreach($array_data as $key=>$value)		{			echo $value[$row_name];		}    }}?>

下面是幾個簡單的調用的例子:

//連接數據庫并返回查詢結果$sqlData = $this->sql_model->select_limit('Entries','*',0,10);		//將數據庫的結果傳入data中$data['query']=$sqlData;//使用變量$data向目標網頁傳入數據$this->load->view('blog_view',$data);

Insert函數的調用例子:

//將要插入的數據存入關聯數組中$data_array['entry_id'] = $_POST['entry_id'];$data_array['body'] = $_POST['body'];$data_array['author'] = $_POST['author'];//執行SQL語句$sqlData = $this->sql_model->insert_into('Comments',$data_array);



生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 午夜国产理论 | 哪里可以看免费毛片 | www.爱爱.com| 国产精品中文字幕在线观看 | 亚洲伊人99综合网 | 欧美做爰孕妇群 | 最近中文字幕mv免费视频 | 青青草原国产在线视频 | 乱小说欧美综合 | 乡下女色又黄一级毛片 | 亚洲国产爱 | 亚洲天堂免费观看 | 国产成人a毛片 | 国产成人鲁鲁免费视频a | 国产精品福利在线观看入口 | 亚洲天堂视频网站 | 成人做爰免费视频免费看 | 国产福利不卡一区二区三区 | 欧美日韩一区二区亚洲 | 国产日产欧美一区二区三区 | 欧美一区二区三区高清视频 | 日本啊啊视频 | 亚洲国产天堂久久综合 | 欧美性videos高清另类hd | 国产欧美一区二区三区免费看 | 成人 在线欧美亚洲 | 亚洲国产精品一区二区久久 | 91在线 一区 二区三区 | 欧美精品成人a多人在线观看 | 99福利网| 亚洲 欧美 日韩中文字幕一区二区 | 亚洲视频在线网 | 一区二区在线精品免费视频 | 成人a视频在线观看 | 国产精品日韩一区二区三区 | 99国产国人青青视频在线观看 | 日韩大片在线观看 | 亚州中文字幕 | xxxxx性视频免费播放 | 99精品高清视频一区二区 | 国产国产成人精品久久 |