1. 模型定義
文件名稱必須是 表名+Model.class.php 例如:UserModel.class.php
namespace Home\Model; //該模型類的命名空間 use Think\Model; //下面的模型類需要繼承Model基類,Model是系統定義的模型類,在 Think\Model 這個命名空間中 class UserModel extends Model { }
文件中的類名是跟文件名中的“表名”是一致的(這一項是必須的如果不一致在控制器中就會找不到這個模型類)。
類名與表名的對應關系是(注意:模型名中對應每個大寫對應的數據表的前面都有一個下劃線,如下第二行)
模型名 約定對應數據表(如果數據庫的前綴是think_) UserModel think_user UserTypeModel think_user_type
2. 模型實例化
2.1 直接實例化
2.1.1 不帶參數實例化 $user=new \Home\Model\UserModel();
2.1.2 帶參數實例化 $user=new \Home\Model\UserModel(['模型名'],['數據表前綴'],['數據庫連接信息']);
上述兩種方法的區別在於,第一種在實例化的時候回去讀取默認配置(例如在模型中的配置或者是模塊中的數據庫配置),而第二種方法是直接讀取傳入參數的數據庫配置
模型名是對應的數據庫中的去掉前綴的表名,如果不指定這會讀取模型類的名稱但是是去掉Model後的名稱 例如:
UsereModel.class.php 文件中的 UsereModel 類 ,如果在實例化的時候傳入模型名"User"會按傳入查找數據表 前綴+“user”,如果不傳則會提取 UsereModel類的 “Usere” 去查找數據表。這樣可以解決模型名與數據表明不一致的問題。
2.2 D方法實例化
D方法的參數是模型的名稱,並且和模型類的大寫定義是一致的。
<?php //實例化模型 $user=D("User"); //相當於 $user=new \Home\Model\UserModel();
跨模塊實例化
D('Admin/User') 其中 “Admin” 是模塊名稱,“User”是模型名稱
實例化 Extend擴展名空間下的Info模型
D('Extend://Editor/Info')
2.3 M方法實例化
M('User') 與D方法實例化的區別是這個方法不需要該模型存在,並且如果模型存在則其中的方法也會別忽略,該方法主要是用來對數據庫的操作。
當D方法沒有找到模型時會默認的調用 M方法。
2.4 實例化空模型
$Model=new Model() 或者 $Model=M();
這種空實例可以用老進行原生的sql查詢(注:其他的模型也可以進行原生的sql查詢,並且查詢的表不必跟模型對應)
3. 模型中的字段
$fields=array('','') 表示數據表中的字段
$pk 表示數據表的主鍵
$connection=array('db_type' => 'mysql','db_user' => 'root','db_pwd' => '1234','db_host' => 'localhost','db_port' => '3306','db_name' => 'thinkphp','db_charset' => 'utf8','db_params' => array(), // 非必須); 表示數據庫連接
數據庫類型://用戶名:密碼@數據庫地址:數據庫端口/數據庫名#字符集
$connection = 'mysql://root:1234@localhost:3306/thinkphp#utf8';