数据据操作 tp5
數(shù)據(jù)庫操作-DB類
學(xué)習(xí)手冊
數(shù)據(jù)庫配置
注意1:在TP里面,可以在模塊下面單獨(dú)的建立一個database.php配置文件,代表這個模塊就使用配置的這個數(shù)據(jù)庫
注意2:我們可以在config.php里面配置多個數(shù)據(jù)信息也是可以的
數(shù)據(jù)庫操作-查詢
先在控制器引入Db類
使用Db類的query方法即可
查詢也可以使用占位符
數(shù)據(jù)庫操作-增刪改
使用Db類的execute方法
數(shù)據(jù)庫切換
在application/config.php里面配置一個db1的數(shù)據(jù)庫信息
使用Db::connect('db1')獲取dedecms數(shù)據(jù)庫里面的數(shù)據(jù)
手冊:
構(gòu)造器-查詢
方式一:獲取所有的數(shù)據(jù)
效果
方式二:獲取單條數(shù)據(jù)(a.根據(jù)主鍵b.查詢條件)
效果
例如:查詢用戶名為caoyang的記錄
構(gòu)造器-添加
構(gòu)造器-更新
構(gòu)造器-刪除
別名處理
對于上面的查詢構(gòu)造器,使用的是Db::table(表前綴的表名),可以換一種方式來不寫表前綴
Db::name('不要表前綴的表名')
建議使用Db::name()方法調(diào)用
助手函數(shù)
在新版TP5里面已經(jīng)不存在M()函數(shù)(tp3.2的時候可以幫我們實(shí)例化系統(tǒng)的模型)使用的是db()幫助函數(shù)進(jìn)行替換
db('不要前綴的表名')->select();
閉包查詢
db('admin')->select(function($query){
// $query里面可以設(shè)置查詢的條件
});
使用Query對象查詢
有點(diǎn)類似laravel里面的查詢構(gòu)造器
模型學(xué)習(xí)
在MVC里面,M是負(fù)責(zé)對數(shù)據(jù)的處理,其實(shí)在TP5里面模型封裝的已經(jīng)很好了,基本上我們不用做過多的操作,使用系統(tǒng)自帶的基類即可完成大部分的curd操作。
模型定義
需要寫在模塊的model目錄下,我們可以使用TP5自帶的命令行工具進(jìn)行生成。
注意1:在TP5里面模型也不在使用類后綴,直接就是使用去除表前綴后的名稱作為模型的名稱。(模型名稱使用大駝峰的方式)
例如:表的名稱為 sh_admin對應(yīng)的模型文件名稱Admin.php
例如:表的名稱為 sh_goods_attribute對應(yīng)的模型文件名稱GoodsAttribute.php
>php think make:model appindexmodelUser
創(chuàng)建后
定義sh_user表
上面的模型和下面的sh_user是對應(yīng)的
基本操作-增加
完成數(shù)據(jù)的增加主要有如下幾種方法
模型對象的save方法(先為對象設(shè)置屬性)
模型類的create靜態(tài)方法
模型對象的saveAll批量添加方法
實(shí)操:
1.模型對象的save方法(先為對象設(shè)置屬性)
2.模型類的create靜態(tài)方法【簡化操作】
3.模型對象的saveAll批量添加方法【上面的兩種操作,都只能完成單條數(shù)據(jù)的插入,如果批量插入數(shù)據(jù),需要使用模型對象的saveAll方法】
基本操作-查看
查詢數(shù)據(jù)主要有如下幾種方法
模型類的get靜態(tài)方法【存在返回值為對象,否則為null】
通過字段查詢getByFieldname()方法
根據(jù)條件查詢get(['username' => 'root'])
where方法查詢->find()
where方法查詢->select()
模型類的all靜態(tài)方法和select靜態(tài)方法
實(shí)操:
1.模型類的get靜態(tài)方法【存在返回值為對象,否則為null】,通過傳遞主鍵獲取數(shù)據(jù)
效果
2.根據(jù)條件查詢get(['username' => 'root'])
方式一:
方式二:使用where方法傳遞(需要注意后面要通過find()方法調(diào)用一下)
3.通過模型對象的字段查詢getByFieldname('查詢條件')方法
模型類的where方法查詢,然后調(diào)用find()方法
5.where方法查詢->select()
方式一:
方式二:
6.模型類的all靜態(tài)方法和select靜態(tài)方法
注意:對應(yīng)all和select方法返回的數(shù)據(jù),是一個數(shù)組,數(shù)組中的每個元素是一個模型對象,如果我們需要把他們轉(zhuǎn)換為普通的二維數(shù)組(數(shù)組中的元素也是數(shù)組)
效果:
便捷方式獲取模型實(shí)例
在新版的Tp5里面可以有如下兩種便捷方式獲取模型實(shí)例:
方式一:使用model助手函數(shù)
方式二:使用TP5自帶的Loader類的model靜態(tài)方法
總結(jié):在新版的TP5里面,在原先TP3.2里面的單字母函數(shù)D已經(jīng)不存在,取而代之的是model函數(shù)。
基本操作-更新
更新數(shù)據(jù)主要有如下幾種方法
1.先 get(),后save()
2.模型類update靜態(tài)方法
實(shí)操:
1.先調(diào)用模型類的get()靜態(tài)方法,然后在調(diào)用模型對象的save()方法
2.模型類update靜態(tài)方法
方式一:
方式二:
基本操作-刪除
刪除數(shù)據(jù)主要有如下幾種方法
1.先使用模型類的get()靜態(tài)方法,然后在使用模型對象的delete()方法
2.模型類destroy靜態(tài)方法
實(shí)操:
1.先使用模型類的get()靜態(tài)方法,然后在使用模型對象的delete()方法
2.模型類destroy靜態(tài)方法
3.使用destroy同時刪除多條數(shù)據(jù)
4.模型對象的delete方法進(jìn)行刪除(需要傳遞刪除條件)
相關(guān)文檔
網(wǎng)站:https://www.kancloud.cn/manual/thinkphp5/135186
模型關(guān)聯(lián)
注意:在TP里面的模型關(guān)聯(lián)沒有l(wèi)aravel里面那么好用,簡單的了解即可,一般來說,還是建議自己在代碼里面完成模型間的關(guān)系處理。不要過來的依賴模型關(guān)聯(lián)。
在TP里面主要是定義三種模型關(guān)聯(lián)類型:
一對一
簡介
注意:一對一的關(guān)系是可以在一張表里面完成的,但是一般來說,數(shù)據(jù)有冷熱之分,熱數(shù)據(jù)(查詢頻繁的數(shù)據(jù),應(yīng)該單獨(dú)的抽取稱為一張表,水平方向字段數(shù)應(yīng)該盡可能的少)冷數(shù)據(jù)(查詢較少的數(shù)據(jù),單獨(dú)的放在另外的一張表里面進(jìn)行操作,通過一個外鍵和熱數(shù)據(jù)表進(jìn)行關(guān)聯(lián)。例如下面的表里面的是通過sh_profile表里面的user_id產(chǎn)生的關(guān)聯(lián)。)
場景:例如一個用戶存在一個具體的用戶履歷信息
sh_user用戶表
|
id |
username |
passsword |
|
|
1 |
caoyang |
admin88 |
gogery@163.com |
|
3 |
andy |
admin88 |
andy@sina.com |
sh_profile履歷表
|
id |
user_id |
address |
card_id |
education |
...... |
|
23 |
1 |
深圳市 |
421023112 |
本科 |
........ |
|
34 |
3 |
廣州市 |
7754123123 |
碩士 |
自己手工的連表查詢:
> select a.*, b.address from sh_user a left join sh_profile b on a.id = b.user_id where a.id = 3;
關(guān)聯(lián)查詢
建立用戶表和履歷表
創(chuàng)建User.php和Profile.php模型文件,并在User.php模型文件里面定義模型關(guān)聯(lián)信息
履歷表模型
查詢關(guān)聯(lián)信息
效果:
對于上面的操作,完全可以自己寫sql完成
百度:鏈?zhǔn)讲僮?/p>
http://www.thinkphp.cn/topic/43233.html
關(guān)聯(lián)添加
1.完全可以自己去在代碼里面完成,沒必要依賴TP的關(guān)聯(lián)模型。
使用Tp的關(guān)聯(lián)模型進(jìn)行數(shù)據(jù)的添加
一對多
簡介
一對多的模型還是很常見的,一般解決方法就是增加一張附加表,然后在附加表里面增加一個關(guān)聯(lián)字段。
常見:一個用戶可以存在多本書籍。
sh_user表:
|
id |
username |
passsword |
|
|
1 |
caoyang |
admin88 |
gogery@163.com |
|
3 |
andy |
admin88 |
andy@sina.com |
sh_book表
|
id |
user_id |
img |
author |
title |
.... |
|
1 |
3 |
1.jpg |
莫言 |
分錄肥臀 |
|
|
3 |
3 |
3.jpg |
西紅柿 |
斗戰(zhàn) |
關(guān)聯(lián)查詢
創(chuàng)建book模型,并且在user模型里面定義關(guān)聯(lián)關(guān)系
定義關(guān)系
構(gòu)造測試數(shù)據(jù)
查詢數(shù)據(jù)
關(guān)聯(lián)添加
1.不依賴TP的關(guān)聯(lián)模型,自己手工的解決
使用Tp的關(guān)聯(lián)模型完成
多對多
文檔:https://www.kancloud.cn/manual/thinkphp5/142359
自動驗(yàn)證
相關(guān)文檔:https://www.kancloud.cn/manual/thinkphp5/129319
場景:用戶的添加的時候完成自動驗(yàn)證,在TP5里面可以使用多種方式完成驗(yàn)證操作。
驗(yàn)證類文件-方式一
在模塊下建立一個validate目錄,編寫對應(yīng)的驗(yàn)證類(類文件的名稱和模型名稱一致)
在控制器中使用模型對象的validate方法調(diào)用
效果
驗(yàn)證類文件-方式二
控制器驗(yàn)證-方式一
調(diào)用控制器的$this->validate(驗(yàn)證數(shù)據(jù),驗(yàn)證類名稱)方法
控制器驗(yàn)證-方式二
1.調(diào)用控制器的$this->validate(驗(yàn)證數(shù)據(jù),驗(yàn)證的規(guī)則)方法
注意:驗(yàn)證通過返回true,否則返回錯誤的提示信息
注意:如果用戶想自定義驗(yàn)證提示信息,則可以傳遞第三個參數(shù)
系統(tǒng)驗(yàn)證類的使用
在有的時候我們不希望自己定義驗(yàn)證類來處理,可以使用系統(tǒng)自帶的Validate類進(jìn)行驗(yàn)證
驗(yàn)證類的靜態(tài)方法
演示
驗(yàn)證場景
TP里面使用了一種叫做驗(yàn)證場景的概念,針對不同的場合使用不同的驗(yàn)證,例如:在添加的時候有添加的驗(yàn)證規(guī)則;在更新的時候有更新的規(guī)則
表單驗(yàn)證
主要是為了防止外站提交(csrf攻擊)
解決:
1.在服務(wù)器返回表單信息的之前,生成一個唯一的密鑰,然后在表單里面的隱藏域里面存放一下,同時還要把數(shù)據(jù)存到session里面一下。
2.用戶填完信息后,點(diǎn)擊提交后,檢測用戶表單隱藏域里面的密鑰和session里面的時候一樣,一樣則沒有偽造提交(外站提交)
實(shí)現(xiàn):
1.在提交表單里面使用token()函數(shù)生成一個隱藏域
在自動驗(yàn)證里面進(jìn)行驗(yàn)證
坑-dateFormat驗(yàn)證規(guī)則
在TP5如果需要驗(yàn)證某個時間數(shù)據(jù),可以指定驗(yàn)證個還是,我們可以使用dateFormat規(guī)則,同時為其傳遞一個驗(yàn)證的規(guī)則字符串。
查看Validate底層的dateFormat方法
相關(guān)文檔:
http://code.ziqiangxuetang.com/php/func-date-parse-from-format.html
SQL調(diào)試
本地調(diào)試模式開啟
修改config.php配置文件即可
打印最后執(zhí)行的sql
總結(jié)
- 上一篇: iOS8设置屏幕亮度按键方法教程
- 下一篇: 《原神》无相之岩位置打法攻略