Think PHP crud,ThinkPHP教程_PHP框架之ThinkPHP(八)【CRUD與連貫操作】

一、CRUD

ThinkPHP提供了靈活和方便的數據庫操作方法,其中最基本的就是CRUD四個操作,只有掌握了最基本的CRUD操作,才能更好的運用更多實用的數據庫操作方法

CRUD操作通常與連貫操作配合

1、創建操作

使用add()方法或addAll()方法

·add()方法

可以直接傳入要插入的數據,而且會在插入之前會過濾掉數據表中不存在的字段以及非法的數據類型(例如對象、數組等非標量數據)。若當前表有主鍵自動增長並且插入記錄成功的話,則返回所插入記錄主鍵值

e5502d3d4f74f52936b045fbe7485fe5.png

eb4b478a37fbc52f8367d4e4a04153c1.png

ba446c40753a528c8625642d5c3092ad.png

如果在執行add()操作之前已經創建了數據對象(通過create()方法或data()方法),則add()中可以不傳值

aac32b66984ef9c64d92f76c7571aac8.png

11ee385101ae535f71da399ebf4538a8.png

21f0d9ac710fda10cb7946e1acce8955.png

·addAll()方法

addAll()方法可以實現批量插入數據

2、讀取操作

在ThinkPHP中通常分為讀取字段(值,單一值)、讀取記錄(一維數組,單條記錄)和讀取記錄集(二維數組,多條記錄)

·讀取字段(值,單一值)

getField()方法

讀取某一條記錄的某一個字段返回的才是單一值

7593d12af3f94458f2d7f206bf168d6b.png

2ed85f5908fc9cc998da596e329f36c2.png

讀取某一條記錄的多個字段返回的是一個一維關聯數組(鍵為第一個字段值,值為其余字段值)(之所以說其余,是因為其余字段並非只有一個,若其余字段不止一個,則值用一個空格隔開)。ps,如果第一個字段值為數字樣式(不管是int,還是char),形成的是索引數組(雖然在PHP中,索引數組與關聯數組並沒有本質上區別)!

759306f9acc9ee0d44d6c63ccf32b96b.png

4404ee5969661e785cf2057ba53d48e1.png

f9cfbc382d4b154c676d830923059ca6.png

1215da196319be7dc596d07bb066ed5f.png

·讀取記錄(一維數組,單條記錄)

find()方法,最多返回一條記錄,即使符合條件的記錄有多條,也僅僅返回一條,所以limit()方法對於find()查詢是無效的

9a0b0f7aa35bbcf750d873c5c566418e.png

ac7b821ade48d6a913a3ef629547a2ab.png

·讀取記錄集(二維數組、多條記錄)

select()方法或findAll()方法

27fceb339d4cd84955d6b29c0b130b7a.png

54e808d1b8d6e1132ccaffb1c415d3d8.png

9ad0acfcf113f4098026389b6f806303.png

3、更新操作

ThinkPHP主要使用save()方法完成更新操作,還有setField()、setInc()、setDec()方法

·save()方法

對於save()方法,如果沒有where方法()指定更新條件或者數據對象(或者是直接傳入的數組)不包含主鍵字段,則save()方法是不會執行更新操作的。目的是為了保證數據庫的安裝,避免錯誤更新表中的所有記錄!類似於add()方法,如果在調用該方法之前已經創建了數據對象(通過create()或data()方法),則可以不傳值

1f63f56cf83d5f817e759420f4929d6b.png

80671d4fc0e9bf214a8d17f3605e82e9.png

a8328d08594590fc93b7b124960ed1fa.png

ca4ba56a293922569500375447f158dc.png

3c945b269d8fba37736d0f1a5fe2fbec.png

4f8f7de6fd57d31444f80a26a5408801.png

2b15f15ed7ef2904afd475cf8373cb8b.png

6d84720b96e3dcce9b6b0a664987f259.png

返回值為受影響的行數,是int類型

·setField()方法

如果只更新某個字段,則也(為什么說也,是因為save()方法也可以更新某一個字段)可以使用setField()方法。當然setField()方法也是可以更新多個字段的,此時傳遞數組參數即可

setField(參數1,參數2); 參數1表示字段名稱,參數2表示將要更新成的值。如果參數1是元素值為各個字段的數組,則參數2也必須是元素值為各個字段相對應值的數組,而且參數1有幾個元素,參數2就必須相應的有幾個元素,這里必須嚴格對應,否則會出現很多意想不到的情況

·setInc()方法

只用於數字類型的字段,setInc(參數1,參數2,參數3); 參數1表示要更新的字段,參數2表示where條件,參數3表示增加的數值(參數3省略則表示增加1)

·setDec()方法

只用於數字類型的字段,setDec(參數1,參數2,參數3); 參數1表示要更新的字段,參數2表示where條件,參數3表示減少的數值(參數3省略則表示減少1)

4、刪除操作

delete()方法,用於刪除記錄,取決於where()方法中定義的條件,同時也可以用order()方法和limit()方法來限制刪除的記錄數

二、連貫操作

ThinkPHP2.0全面啟用連貫操作方法,可以有效提高數據存取的代碼清晰度和開發效率。連貫操作適用於CRUD操作,並不是只使用與R操作

所有的連貫操作都只有一個參數,而且連貫操作的參數只在當前操作中有效,操作完成后自動清空連貫操作的所有傳值。簡而言之,連貫操作的結果不會帶入以后的查詢

舉個例子,查看User表中滿足密碼為123456的前3條記錄,並且按照id進行排序

cc3ea3fd3afd6c3ce3e37d3748c424a0.png

ec774c9a7abdb6503ae8b5bbc1e2b48f.png

在連貫操作中,除了select()方法必須放在最后之外,其余方法的順序可隨意。注意,這點與MySQL原生的sql語句要區別開,MySQL原生的sql語句的各子語句是有嚴格的先后順序關系的,所以一下寫法與上面寫法等效!

337e31c84e66ad247106323cca20cf02.png

補充,ThinkPHP不僅僅支持連貫操作,還支持直接使用參數進行查詢,比如說將上述連貫操作的代碼改成如下形式。使用數組參數的方式的話,數組的鍵是連貫操作的方法名,值是連貫操作的參數

faec22048161c6715941c2187d6d9cf2.png

1、where()方法

用於查詢、更新、刪除操作中條件的定義,相當於原生sql語句中的where子句

參數支持String、Aarry和Object類型

2、table()方法

用於定義要操作數據表的名稱。也就是說,如果想通過某模型對象操作非該模型對象對應的表或者說操作多張表,則可使用該方法定義想要操作的數據表

注意,表名必須是帶前綴的完整表名,可以使用別名

參數支持String和Array類型(Array類型用於給表起別名,鍵是原名,值是別名。若不指定值,則不起別名)    強調一下,String類型也可以給表起別名的

432d34a14cd5fead82037d927d9f376e.png

e9b327b2d3030daf8bf529aea12d9d0e.png

8b6b5f70df4305f24c7e5ae04c9aa30b.png

3、data()方法

用於向模型對象中傳遞數據,然后再進行創建、更新和刪除操作

84dcd4912dbfa1d3f65314cf92bd80d3.png

c18382feb8639f118a88719571450a4e.png

5a5e367968e0abf7632564582cc8cade.png

注意與create()方法區別開,之前探討過兩者之間的區別

4、field()方法

用於查詢操作中所查詢字段的定義

參數支持String和Aarry類型(Array類型用於給字段起別名,鍵是原名,值是別名。若不指定值,則不起別名)  強調一下,String類型也是可以給字段起別名的

a340560554e21da09426dc135ffee594.png

68cd8e8053fd45832a6f9dbccb24d01d.png

5、order()方法

用於結果排序

支持多個字段排序

參數支持String和Array類型(Array類型,鍵是字段名,值是排序規則。若不指定值,則默認是升序)

b3805b5ebc7015ed5a24a3a0048ed011.png

41afc3e8afcdde084e57cbc852917aa0.png

6、limit()方法

用於結果限制

實際上,對於不同的數據庫,limit子句的語法是不盡相同的,但是ThinkPHP在底層已經為我們屏蔽了這個差異,所以不管是什么類型的數據庫 ,都是使用統一的limit()方法

參數支持String

7、page()方法

用於查詢分頁

page('page,[listRows]'); String類型的參數中,page表示當前為第page頁,listRows表示每頁多少條記錄,如果listRows省略的話,則listRows取limit方法中所限制的記錄條數

注意,一般很少使用該方法,而是使用分頁類

8、group()方法

用於分組

參數只支持String類型

9、having()方法

用於分組后過濾

參數只支持String類型

10、join()方法

用於連接查詢

注意,join()方法是連貫操作中唯一可以多次調用的方法

參數支持String和Array類型

而且在內部已經實現了重復字段的消除處理了的

b9c0a9c70944ed605e7f89becf347a39.png

11、distinct()方法

用於消除重復記錄,即進行唯一性過濾

參數支持Bool類型

12、relation()方法

用於關聯操作

13、lock()方法

用於數據庫中的鎖機制

lock(true)就會自動在生成的sql語句后面加上FOR UPDATE

ps,不難看出,以上這些方法,如果參數是String類型,則該參數就可以按照原生sql相對應的子句語法格式進行書寫!如果參數是Array類型的,則要注意不同方法中,鍵與值的含義

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值