【系統常量信息】
獲取系統常量信息:
如果加參數true,會分組顯示:
》系統常量信息裏經常用到的是user裏的路徑
》 APP_PATH =>string'./shop/' 項目路徑
》 MODE_PATH 模型路徑
》 __SELF__ 自身路徑
》 '__APP__'=>string'/ThinkPHP/index.php' 入口文件
》 __MODULE__ =>string'/ThinkPHP/index.php/Home' 當前模塊路徑
》 __ACTION__ 當前方法的路徑
》 __CONTROLLER__ 當前控制器的路徑
可以通過以上這些常量獲取當前的路徑
【跨控制器調用】
一個控制器在執行的時候,可以實例化另外一個控制,並通過對象訪問其指定方法。
跨控制器調用可以節省我們代碼的工作量
在Main控制器中有一個Info操作方法
想要在其它控制器,比如Login中調用,我們可以實例化控制器對象,調用裏面的方法即可:
造對象有快捷函數供我們使用:
A(“[模塊/]控制器標誌”) 實例化控制器對象
R([模塊/]控制器標誌/操作方法) 實例化對象同時調用指定方法
注:【跨控制器調用】沒有限制條件一定要在同一個文件夾下,但是需要在同一個命名空間下。如果不是,需要更改引用的命名空間
》 TP框架提供的跨控制器調用的三種快捷方法:
1.new MainController(); 造對象
2.A("[模塊]/控制器標識"); 快捷函數 跨模塊調用;可以快速的造對象;如果是同一個模塊下,模塊路徑部可以省略
3.R("控制器/操作方法"); 快捷函數 造控制器對象並且調用方法
【連接數據庫配置及Model數據模型層】
convertion.php
config.php
1.在config.php做數據庫連接配置
做數據模型層需要先做個數據庫配置,然後根據自己的需要到自己項目配置中修改.
修改中:
數據庫調式模式 默認爲true 開啓後可以記錄SQL日誌
啓用字段緩存默認爲true 會把字段全部緩存下來,可以提高查詢速度
數據庫的默認端口號是3306
配置好後Model層就可以用了
2.用Model層之前要造model模型
a) model本身就是一個類文件
b) 數據庫中的每個數據表都對應一個model模型文件
c) 最簡單的數據model模型類
3.字段緩存設置
tp框架執行過程中會使用到數據表中的字段信息,通過sql語句可以查詢”show colums from table” ,處於性能考慮,可以把字段緩存,避免每次重複執行sql語句。
4.可以根據情況對當前的model模型進行個性化設置
實例化Model的三種方式:
1. $goods = new 命名空間GoodsModel(); -->new 命名空間\模型
例如:$info = new \Home\Model\InfoModel();
2. $goods = D(‘模型標誌’);
a) $goods = D(“Goods”);
b) 該$goods是父類Model的對象,但是操作的數據表還是sw_goods
c) $obj = D(); 實例化Model對象,沒有具體操作數據表,與M()方法效果一致
3.$obj = M();
a) 實例化父類Model
b) 可以直接調用父類Model裏邊的屬性,獲得數據庫相關操作
c) 自定義model就是一個空殼,沒有必要實例化自定義model
d) $obj = M(‘數據表標誌’); 實例化Model對象,實際操作具體的數據表
$obj = D(標誌);
$obj = D();
$obj = M(標誌);
$obj = M();
D()和M()方法的區別:
前者是tp3.1.3裏邊對new操作的簡化方法;
後者在使用就是實例化Model父類
兩者都在函數庫文件定義ThinkPHP/Common/functions.php
注意:如果沒有對應的model模型文件類,也可以直接實例化model對象進行操作
D()和M()方法都可以實例化操作一個沒有具體model模型類文件的數據表。
【數據查詢】
select()是數據(父類)模型的一個指定方法,可以獲得數據表的數據信息
返回一個二維數組信息,當前數據表的全部數據信息
$obj = D(); 創建對象
$obj -> select(); 查詢數據
select 字段,字段 from 表名 where 條件 group 字段 having 條件 order 排序 limit 限制條數;
SELECT%DISTINCT%%FIELD%FROM %TABLE%%JOIN%%WHERE%%GROUP%%HAVING%%ORDER%%LIMIT% %UNION%%COMMENT%
$obj -> field(字段,字段); 查詢指定字段
$obj -> table(數據表); 設置具體操作數據表
$obj -> where(參數); 參數就是正常sql語句where後邊的條件信息
例如:( “goods_price >100 and goods_name like ‘三%’”)
$obj -> group(字段); 根據字段進行分組查詢
$obj -> having(參數條件); having 條件設置
$obj -> order(‘price desc/asc’) 排序查詢
$obj -> limit([偏移量,]條數) 限制查詢的條數
sql語句裏邊具體的條件設置在tp框架model模型裏邊體現爲具體的方法操作
以上方法理論上是父類Model的對應方法
父類model具體存在方法: field() where() limit()
還有一些方法在__call()自動調用函數裏邊: table() group() order() having()
在__call()魔術方法裏邊會判斷當前的執行方法是否是一個method屬性的元素信息,如果存在就會執行執行
以上多個方法是同時使用多個進行條件顯示(並且沒有順序要求)
$obj -> limit(5)->field(‘id,name’)->order(‘price asc’) -> table(‘sw_goods’)->select();
以上許多方法執行沒有順序要求,許多方法執行後都是把具體的參數賦予到model屬性options裏邊,最後根據options拼裝sql語句。
$info = $goods -> where()->field(字段)->select();
連貫操作:在方法結束之後,調用對象本身
連貫操作,多條件查詢
M()造Model的時候沒有的定義表名,想查詢哪個表,可以調用table方法傳表名
例如:$info ->table("info");
select()方法
1. 返回一個二維數組信息
2. 返回全部數據表信息
3. 給該方法傳遞參數
a) select(30) 查詢主鍵值等於30的記錄信息
b) select(“10,12,14”) 查詢主鍵值在10、12、14範圍的記錄信息
4 . find()如果我們查詢的結果只有一個信息,使用select()會返回一個二維數組,爲了使用方便我們會希望返回一個一維數組,這時候可使用find()方法
5 . having()方法設置查詢條件,where()設置查詢條件
6. 相關聚合函數 count() sum() avg() max() min()
以上聚合函數是最後被調用的方法
以上方法可以結合具體條件方法使用
例如:$goods -> where(‘goods_price >1000’)->count(); 大於1000元的商品的總數目
注:
》 select方法:查詢數據集,可以有表達式參數,這個方法可以返回結果。相當於查詢所有的數據,返回的是二維數組也可以給select參數來查詢,根據主鍵查詢
例:$info->select("p001");
查詢兩個條件 $info->select( "p001,p002");
》造模型的對象,model和controller同理,可以在think文件夾底下找到Model的類(Model.class.php) 而且是所有模型層的父類。用D方法實際造的是一個父類的對象,由於傳了 一個參數,參數是表名。就會自動根據這個表造出模型
》M(); 也可以按照D方法同理使用。但是如果不傳參數的話,造的就是父類對象