Db: 是TP5操作數(shù)據(jù)庫的入口類。它的作用是為連接數(shù)據(jù)庫做準(zhǔn)備,我們只需要在database.php里填寫相應(yīng)的配置即可。
Connection: 是TP5的連接器類,因?yàn)門P5支持四種數(shù)據(jù)庫(Mysql,Pgsql,Sqlite,Sqlsrv),所以TP5封裝了一個(gè)類來提供統(tǒng)一的調(diào)用接口來支持我們連接數(shù)據(jù)庫(這里的連接是惰性連接,只有在執(zhí)行SQL的時(shí)候才會(huì)真正連接)。
Query: 查詢器,因?yàn)椴煌瑪?shù)據(jù)庫的SQL語句不同,所以封裝了一個(gè)Query類來提供統(tǒng)一的接口,以實(shí)現(xiàn)不同數(shù)據(jù)庫的CURD操作。查詢器是TP5數(shù)據(jù)訪問層的核心,它連接了Connection和Builder。
Builder: 生成器。這個(gè)類主要是把Query的查詢參數(shù)生成相應(yīng)的sql語句,然后把其返回給Connection供其使用。2, 數(shù)據(jù)庫的訪問
在TP5中,對(duì)于數(shù)據(jù)庫的訪問有三種方法:
原生sql語句。
Db::query( select * from think_user where id=? ,[8]);Db::execute( insert into think_user (id, name) html' target='_blank'>values (?, ?) ,[8, thinkphp
查詢構(gòu)造器
需要注意的是,上述的查詢方法中find,select,insert,update,delete都是查詢操作,其他的都是輔助操作,輔助操作返回的是個(gè)對(duì)象,支持鏈?zhǔn)秸{(diào)用。但一旦執(zhí)行了查詢操作,就不能繼續(xù)調(diào)用了。
不同的輔助操作先后順序沒影響,但是相同的輔助操作先后順序會(huì)有影響。
不同的輔助操作,先后順序沒影響。Db::table( banner )- where( id , , 2 )- order( update_time asc )- select();Db::table( banner )- order( update_time asc )- where( id , , 2 )- select();
相同的查詢操作,先后順序有影響。$list = Db::table( data ) - where( id , , 1) - where( name , like , %think% ) - order( id , desc ) - order( create_time , desc ) - limit(8) - select();$list = Db::table( data ) - where( name , like , %think% ) - where( id , , 1) - order( create_time , desc ) - order( id , desc ) - limit(8) - select();
模型
ORM Object Relation Mapping 對(duì)象關(guān)系映射
就是通過模型來映射到我們的數(shù)據(jù)庫中的表,然后通過操作模型來操作數(shù)據(jù)庫。
我們通過和查詢構(gòu)造器對(duì)比來看
// 查詢操作$user = Db::table( user )- find(1);// 取值操作echo $user[ name echo $user[ email // 設(shè)置操作$user[ name ] = topthink $user[ email ] = [email protected] // 更新操作Db::table( user )- update($user);
如果是模型操作的話,就可以對(duì)應(yīng)下面的代碼實(shí)現(xiàn)
// 查詢操作$user = User::get(1);// 取值操作echo $user- name;echo $user- email;// 設(shè)置操作$user- name = topthink $user- email = [email protected] // 更新操作$user- save();
這里是在模型的外部,也就是控制器里的取值和設(shè)置操作,但是在模型內(nèi)部,是使用如下方式:
// 取值操作echo $user- getData( name echo $user- getData( email // 設(shè)置操作echo $user- data( name , SpawN echo $user- data( email , [email protected]
模型的CURD操作
創(chuàng)建
Db 用法:
Db::table( user )- insert([ name = spawn , email = [email protected] ])
模型用法:
$user = new User;$user- save([ name = spawn , email = [email protected] ])$user = User::create([ name = sapwn , email = [email protected] ])
總結(jié):
save(動(dòng)態(tài)) 返回: 影響的記錄數(shù)
create(靜態(tài)) 返回:模型對(duì)象實(shí)例 (可以直接調(diào)用方法)
讀取
Db :
$user = Db::table( user )- where( id , 1)- find();
模型:
$user = User::get(1);
需要注意的是,find和select是查詢構(gòu)造器的方法,get和all是模型的方法。但模型又是基于查詢構(gòu)造器的,所以模型可以調(diào)用find和select方法,但是查詢構(gòu)造器不能調(diào)用get和all方法
總結(jié):
方法 作用 返回值
get 查詢單個(gè)記錄 模型對(duì)象實(shí)例
find 查詢單個(gè)記錄 模型對(duì)象實(shí)例
all 根據(jù)主鍵查詢多個(gè)記錄 包含模型對(duì)象實(shí)例的數(shù)組或者數(shù)據(jù)集
select 根據(jù)條件查詢多個(gè)記錄 包含模型對(duì)象實(shí)例的數(shù)組或者數(shù)據(jù)集
更新
Db :
Db::table( user )- where( id , 1)- update([ name = haha , email = [email protected] ])
模型:
$user = User::get(1);$user- save([ name = haha , email = [email protected] ])User::update([ name = topthink , email = [email protected] ,], [ id = 1]);
總結(jié):
方法 作用 返回值
save 更新數(shù)據(jù) 影響的記錄數(shù)
update 更新數(shù)據(jù)(靜態(tài)) 返回模型對(duì)象實(shí)例
需要注意的是,模型的更新操作是只更新有變化的數(shù)據(jù)。性能比較好。
刪除
Db:
Db::table( user )- delete(1);
模型:
$user = User::get(1);$user- delete();User::destory(1);
總結(jié):
方法 作用 返回值
delete 刪除當(dāng)前數(shù)據(jù) 影響的記錄數(shù)
destroy 刪除指定數(shù)據(jù)(靜態(tài)) 影響的記錄數(shù)
現(xiàn)在我們已經(jīng)掌握了模型的基本CURD操作,我們來總結(jié)下方法區(qū)別:
用法 Db類 模型(動(dòng)態(tài)) 模型(靜態(tài))
創(chuàng)建 insert save create
更新 update save update
讀取單個(gè) find find get
讀取多個(gè) select select all
刪除 delete delete destroy
本文講解了關(guān)于ThinkPHP5的數(shù)據(jù)庫和模型用法 ,更多相關(guān)內(nèi)容請(qǐng)關(guān)注php 。
相關(guān)推薦:
關(guān)于thinkphp5.0數(shù)據(jù)庫操作的案例
列舉ThinkPHP5與ThinkPHP3的一些異同點(diǎn)
創(chuàng)建一個(gè)最簡單的ThinkPhp項(xiàng)目工程
以上就是關(guān)于ThinkPHP5的數(shù)據(jù)庫和模型用法的詳細(xì)內(nèi)容,PHP教程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選