注意1:在TP裏面,能夠在模塊下面單獨的創建一個database.php配置文件,表明這個模塊就使用配置的這個數據庫php
注意2:咱們能夠在config.php裏面配置多個數據信息也是能夠的html
先在控制器引入Db類laravel
使用Db類的query方法便可sql
查詢也可使用佔位符thinkphp
使用Db類的execute方法數據庫
手冊:數組
方式一:獲取全部的數據服務器
效果session
方式二:獲取單條數據(a. 根據主鍵 b.查詢條件)閉包
效果
例如:查詢用戶名爲caoyang的記錄
對於上面的查詢構造器,使用的是Db::table(表前綴的表名),能夠換一種方式來不寫表前綴
Db::name('不要表前綴的表名')
建議使用Db::name()方法調用
在新版TP5裏面已經不存在M()函數(tp3.2的時候能夠幫咱們實例化系統的模型)使用的是db()幫助函數進行替換
db('不要前綴的表名')->select();
db('admin')->select(function($query){
// $query裏面能夠設置查詢的條件
});
有點相似laravel裏面的查詢構造器
在MVC裏面,M是負責對數據的處理,其實在TP5裏面模型封裝的已經很好了,基本上咱們不用作過多的操做,使用系統自帶的基類便可完成大部分的curd操做。
須要寫在模塊的model目錄下,咱們可使用TP5自帶的命令行工具進行生成。
注意1:在TP5裏面模型也不在使用類後綴,直接就是使用去除表前綴後的名稱做爲模型的名稱。(模型名稱使用大駝峯的方式)
例如:表的名稱爲 sh_admin 對應的模型文件名稱 Admin.php
例如:表的名稱爲 sh_goods_attribute 對應的模型文件名稱 GoodsAttribute.php
>php think make:model app\index\model\User
建立後
上面的模型和下面的sh_user是對應的
完成數據的增長主要有以下幾種方法
實操:
1.模型對象的save方法(先爲對象設置屬性)
2.模型類的create靜態方法【簡化操做】
3.模型對象的saveAll批量添加方法【上面的兩種操做,都只能完成單條數據的插入,若是批量插入數據,須要使用模型對象的saveAll方法】
查詢數據主要有以下幾種方法
實操:
1.模型類的get靜態方法【存在返回值爲對象,不然爲null】,經過傳遞主鍵獲取數據
效果
2.根據條件查詢get(['username' => 'root'])
方式一:
方式二:使用where方法傳遞(須要注意後面要經過find()方法調用一下)
3.經過模型對象的字段查詢getByFieldname('查詢條件')方法
5.where方法查詢->select()
方式一:
方式二:
6.模型類的all靜態方法和select靜態方法
注意:對應all和select方法返回的數據,是一個數組,數組中的每一個元素是一個模型對象,若是咱們須要把他們轉換爲普通的二維數組(數組中的元素也是數組)
效果:
在新版的Tp5裏面能夠有以下兩種便捷方式獲取模型實例:
方式一:使用model助手函數
方式二:使用TP5自帶的Loader類的model靜態方法
總結:在新版的TP5裏面,在原先TP3.2裏面的單字母函數D已經不存在,取而代之的是model函數。
更新數據主要有以下幾種方法
1.先 get(),後save()
2.模型類update靜態方法
實操:
1.先調用模型類的get()靜態方法,而後在調用模型對象的save()方法
2.模型類update靜態方法
方式一:
方式二:
刪除數據主要有以下幾種方法
1.先使用模型類的get()靜態方法,而後在使用模型對象的delete()方法
2.模型類destroy靜態方法
實操:
1. 先使用模型類的get()靜態方法,而後在使用模型對象的delete()方法
2.模型類destroy靜態方法
3.使用destroy同時刪除多條數據
4.模型對象的delete方法進行刪除(須要傳遞刪除條件)
網站:https://www.kancloud.cn/manual/thinkphp5/135186
注意:在TP裏面的模型關聯沒有laravel裏面那麼好用,簡單的瞭解便可,通常來講,仍是建議本身在代碼裏面完成模型間的關係處理。不要過來的依賴模型關聯。
在TP裏面主要是定義三種模型關聯類型:
注意:一對一的關係是能夠在一張表裏面完成的,可是通常來講,數據有冷熱之分,熱數據(查詢頻繁的數據,應該單獨的抽取稱爲一張表,水平方向字段數應該儘量的少)冷數據(查詢較少的數據,單獨的放在另外的一張表裏面進行操做,經過一個外鍵和熱數據表進行關聯。例以下面的表裏面的是經過sh_profile表裏面的user_id產生的關聯。)
場景:例如一個用戶存在一個具體的用戶履歷信息
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;
履歷表模型
效果:
對於上面的操做,徹底能夠本身寫sql完成
百度:鏈式操做
http://www.thinkphp.cn/topic/43233.html
1. 徹底能夠本身去在代碼裏面完成,不必依賴TP的關聯模型。
一對多的模型仍是很常見的,通常解決方法就是增長一張附加表,而後在附加表裏面增長一個關聯字段。
常見:一個用戶能夠存在多本書籍。
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 |
西紅柿 |
鬥戰 |
|
定義關係
1. 不依賴TP的關聯模型,本身手工的解決
文檔:https://www.kancloud.cn/manual/thinkphp5/142359
相關文檔:https://www.kancloud.cn/manual/thinkphp5/129319
場景:用戶的添加的時候完成自動驗證,在TP5裏面可使用多種方式完成驗證操做。
效果
1.調用控制器的$this->validate(驗證數據,驗證的規則)方法
注意:驗證經過返回true,不然返回錯誤的提示信息
注意:若是用戶想自定義驗證提示信息,則能夠傳遞第三個參數
在有的時候咱們不但願本身定義驗證類來處理,可使用系統自帶的Validate類進行驗證
演示
TP裏面使用了一種叫作驗證場景的概念,針對不一樣的場合使用不一樣的驗證,例如:在添加的時候有添加的驗證規則;在更新的時候有更新的規則
主要是爲了防止外站提交(csrf攻擊)
解決:
1. 在服務器返回表單信息的以前,生成一個惟一的密鑰,而後在表單裏面的隱藏域裏面存放一下,同時還要把數據存到session裏面一下。
2. 用戶填完信息後,點擊提交後,檢測用戶表單隱藏域裏面的密鑰和session裏面的時候同樣,同樣則沒有僞造提交(外站提交)
實現:
1. 在提交表單裏面使用token()函數生成一個隱藏域
在TP5若是須要驗證某個時間數據,能夠指定驗證個仍是,咱們可使用dateFormat規則,同時爲其傳遞一個驗證的規則字符串。
查看Validate底層的dateFormat方法
相關文檔:
http://code.ziqiangxuetang.com/php/func-date-parse-from-format.html
修改config.php配置文件便可