關於thinkphp框架中模型筆記

2021-09-25 20:02:18 字數 2906 閱讀 7804

模型這一塊,感覺學習的不是很清楚,單獨水一貼thinkphp中模型的學習筆記。

資料庫中每一張表對應乙個模型,類名就是表名,類裡面的成員變數就是列名,

把一張表對應為乙個類,其中一條資料對應乙個物件

如果我們對該錶的模型沒有特殊操作的話可以不用建立該模型,但c層和v層必須有

模型類簡單**:

<?php 

namespace home\model;

usethink\model;

class usermodel extends

model

}?>

控制類呼叫模型例項:

<?php 

namespace home\controller;

usethink\controller;

class indexcontroller extends

controller

模型不得不提一下d 和 m 函式。

d函式和m函式是快速初始化模型的think php內建方法。

d函式和m函式的區別是,m函式可以初始化乙個沒有定義模型類的模型,也就是說m函式在執行原生sql的時候效率更高

$user= d('user');
這句**代表初始化model下面的usermodel類。

d函式例項化的是 你當前專案的lib/model下面的模組

如果該模組不存在的話  直接返回例項化model的物件(意義就與m()函式相同)

而m 只返回 例項化 model的物件..它的$name引數 作為資料庫的表名來處理對資料庫的操作

下面來舉例例項化模型類的三種方法

三種方法 new直接例項化,m函式和d函式,重點區別下m和d函式的區別和意義。

new例項

用new的方式:需要自己建立模型檔案,需要哪個表的模型,就去建哪個表的model:在home/model/中新建***model.class.php

<?php 

namespace home\model;

usethink\model;

class infomodel extends

model

對應控制器類檔案:

function

showall()

d函式

不用建模型檔案,例項化父類model的物件

$info = d("info");  //

造的是父類think\model的物件

var_dump($info);

m函式

例項化父類model

$info = m("info");
可以直接呼叫父類model裡邊的屬性,獲得資料庫相關操作,但沒有具體表的資料

這樣就可以操作info表資料

d函式和m函式支援原生sql查詢:

public

function

index()

//生成sql:

select count(*) from word_a:sql

public

function

index()

//生成sql:

select count(*) from word_a:sql

查詢多條資料:

//

根據主鍵獲取多個資料

$list = user::all('1,2,3');

//或者使用陣列

$list = user::all([1,2,3]);

foreach($list

as$key=>$user)//

使用陣列查詢

$list = user::all(['status'=>1]);

//使用閉包查詢

$list = user::all(function($query

));foreach($list

as$key=>$user

)

資料表定義

在thinkphp的模型裡面,有幾個關於資料表名稱的屬性定義:

字段定義

可以通過設定db_fields_cache 引數來關閉字段自動快取,如果在開發的時候經常變動資料庫的結構,而不希望進行資料表的字段快取,可以在專案配置檔案中增加如下配置:

// 關閉字段快取

'db_fields_cache'=>false

注意:除錯模式下面由於考慮到資料結構可能會經常變動,所以預設是關閉字段快取的。

全域性配置定義

常用的配置方式是在應用配置檔案或者模組配置檔案中新增下面的配置引數:

//資料庫配置資訊

'db_type' => 'mysql', //

資料庫型別

'db_host' => '127.0.0.1', //

伺服器位址

'db_name' => 'thinkphp', //

資料庫名

'db_user' => 'root', //

使用者名稱'db_pwd' => '123456', //

密碼'db_port' => 3306, //

埠'db_params' => array(), //

資料庫連線引數

'db_prefix' => 'think_', //

資料庫表字首

'db_charset'=> 'utf8', //

字符集'db_debug' => true, //

資料庫除錯模式 開啟後可以記錄sql日誌

關於thinkphp關聯模型的HAS ONE

距離第一次學習thinkphp有一年多了,也算是認識它和使用它一年多了吧,但是發現我對thinkphp還是有些不熟悉的地方,特別是模型。最近開發二手房專案,裡面用到模型,然後資料庫是沿用之前的,框架轉為thinkphp,之前一直自己設計資料庫,所以模型可以做的和官方一樣,但是這次因為資料庫不便於改動...

ThinkPHP中的模型命名

當我們建立乙個usermodel類的時候,其實已經遵循了系統的約定。thinkphp要求資料庫的表名和模型類的命名遵循一定的規範,首先資料庫的表名和字段全部採用小寫形式,模型類的命名規則是除去表字首的資料表名稱,並且首字母大寫,然後加上模型類的字尾定義,例如 usermodel 表示user資料物件...

關於thinkphp關聯模型的效率問題

以前聽說過thinkphp關聯模型效率比較低,但是一直沒去看源 現在也沒看 今天寫rbac的時候才感覺到 user表,字段 id,nickname role表,字段 id,remark role user表,user id,role id 將所有使用者列出來,並顯示其所在使用者組 一 使用think...