TP框架基礎(三)

【系統常量信息】

獲取系統常量信息:

如果加參數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”)  查詢主鍵值在101214範圍的記錄信息

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方法同理使用。但是如果不傳參數的話,造的就是父類對象

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章