數據據操做 tp5

數據庫操做-DB類

學習手冊

 

 

 

數據庫配置

 

 

 

注意1:在TP裏面,能夠在模塊下面單獨的創建一個database.php配置文件,表明這個模塊就使用配置的這個數據庫php

 

 

 

注意2:咱們能夠在config.php裏面配置多個數據信息也是能夠的html

 

 

 

數據庫操做-查詢

先在控制器引入Db類laravel

 

 

使用Db類的query方法便可sql

 

 

查詢也可使用佔位符thinkphp

 

 

 

數據庫操做-增刪改

使用Db類的execute方法數據庫

 

 

 

數據庫切換

  1. 在application/config.php裏面配置一個db1的數據庫信息

 

 

  1. 使用Db::connect('db1') 獲取 dedecms數據庫裏面的數據

 

 

 

 

 

手冊:數組

 

 

 

 

構造器-查詢

 

方式一:獲取全部的數據服務器

 

 

效果session

 

 

 

方式二:獲取單條數據(a. 根據主鍵 b.查詢條件)閉包

 

 

效果

 

 

例如:查詢用戶名爲caoyang的記錄

 

 

 

構造器-添加

 

 

 

構造器-更新

 

 

構造器-刪除

 

 

 

別名處理

對於上面的查詢構造器,使用的是Db::table(表前綴的表名),能夠換一種方式來不寫表前綴

Db::name('不要表前綴的表名')

 

 

建議使用Db::name()方法調用

 

助手函數

在新版TP5裏面已經不存在M()函數(tp3.2的時候能夠幫咱們實例化系統的模型)使用的是db()幫助函數進行替換

db('不要前綴的表名')->select();

 

 

 

閉包查詢

db('admin')->select(function($query){

// $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表

上面的模型和下面的sh_user是對應的

 

 

基本操做-增長

完成數據的增長主要有以下幾種方法

  1. 模型對象的save方法(先爲對象設置屬性)
  2. 模型類的create靜態方法
  3. 模型對象的saveAll批量添加方法

 

 

實操:

1.模型對象的save方法(先爲對象設置屬性)

 

 

2.模型類的create靜態方法【簡化操做】

 

 

3.模型對象的saveAll批量添加方法【上面的兩種操做,都只能完成單條數據的插入,若是批量插入數據,須要使用模型對象的saveAll方法】

 

 

 

基本操做-查看

查詢數據主要有以下幾種方法

  1. 模型類的get靜態方法【存在返回值爲對象,不然爲null】
  2. 經過字段查詢getByFieldname()方法
  3. 根據條件查詢get(['username' => 'root'])
  4. where方法查詢->find()
  5. where方法查詢->select()
  6. 模型類的all靜態方法和select靜態方法

 

實操:

1.模型類的get靜態方法【存在返回值爲對象,不然爲null】,經過傳遞主鍵獲取數據

 

 

效果

 

 

2.根據條件查詢get(['username' => 'root'])

方式一:

 

 

方式二:使用where方法傳遞(須要注意後面要經過find()方法調用一下)

 

 

 

3.經過模型對象的字段查詢getByFieldname('查詢條件')方法

 

 

 

  1. 模型類的where方法查詢,而後調用find()方法

 

 

 

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

email

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;

 

關聯查詢

  1. 創建用戶表和履歷表

 

 

 

  1. 建立User.php和Profile.php模型文件,並在User.php模型文件裏面定義模型關聯信息

 

 

履歷表模型

 

 

 

  1. 查詢關聯信息

 

 

效果:

 

 

對於上面的操做,徹底能夠本身寫sql完成

 

 

 

百度:鏈式操做

http://www.thinkphp.cn/topic/43233.html

 

 

 

關聯添加

1. 徹底能夠本身去在代碼裏面完成,不必依賴TP的關聯模型

 

 

 

  1. 使用Tp的關聯模型進行數據的添加

 

 

 

一對多

簡介

一對多的模型仍是很常見的,通常解決方法就是增長一張附加表,而後在附加表裏面增長一個關聯字段。

常見:一個用戶能夠存在多本書籍。

sh_user表:

id

username

passsword

email

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. 建立book模型,而且在user模型裏面定義關聯關係

 

 

定義關係

 

 

 

  1. 構造測試數據

 

 

 

  1. 查詢數據

 

 

關聯添加

1. 不依賴TP的關聯模型,本身手工的解決

 

 

 

  1. 使用Tp的關聯模型完成

 

 

 

多對多

文檔:https://www.kancloud.cn/manual/thinkphp5/142359

自動驗證

相關文檔:https://www.kancloud.cn/manual/thinkphp5/129319

 

場景:用戶的添加的時候完成自動驗證,在TP5裏面可使用多種方式完成驗證操做。

 

驗證類文件-方式一

  1. 在模塊下創建一個validate目錄,編寫對應的驗證類(類文件的名稱和模型名稱一致)

 

 

  1. 在控制器中使用模型對象的validate方法調用

 

 

效果

 

 

驗證類文件-方式二

 

 

 

控制器驗證-方式一

  1. 調用控制器的$this->validate(驗證數據,驗證類名稱)方法

 

 

 

 

控制器驗證-方式二

1.調用控制器的$this->validate(驗證數據,驗證的規則)方法

 

 

注意:驗證經過返回true,不然返回錯誤的提示信息

注意:若是用戶想自定義驗證提示信息,則能夠傳遞第三個參數

 

 

系統驗證類的使用

在有的時候咱們不但願本身定義驗證類來處理,可使用系統自帶的Validate類進行驗證

 

 

驗證類的靜態方法

 

 

演示

 

 

 

驗證場景

TP裏面使用了一種叫作驗證場景的概念,針對不一樣的場合使用不一樣的驗證,例如:在添加的時候有添加的驗證規則;在更新的時候有更新的規則

 

 

 

表單驗證

主要是爲了防止外站提交(csrf攻擊)

解決:

1. 在服務器返回表單信息的以前,生成一個惟一的密鑰,而後在表單裏面的隱藏域裏面存放一下,同時還要把數據存到session裏面一下。

2. 用戶填完信息後,點擊提交後,檢測用戶表單隱藏域裏面的密鑰和session裏面的時候同樣,同樣則沒有僞造提交(外站提交)

 

實現:

1. 在提交表單裏面使用token()函數生成一個隱藏域

 

 

 

  1. 在自動驗證裏面進行驗證

 

 

坑-dateFormat驗證規則

在TP5若是須要驗證某個時間數據,能夠指定驗證個仍是,咱們可使用dateFormat規則,同時爲其傳遞一個驗證的規則字符串。

 

 

查看Validate底層的dateFormat方法

 

 

相關文檔:

http://code.ziqiangxuetang.com/php/func-date-parse-from-format.html

 

SQL調試

本地調試模式開啓

 

 

修改config.php配置文件便可

 

 

打印最後執行的sql

 

相關文章
相關標籤/搜索