ThinkPHP教程_PHP架構之ThinkPHP(八)【CRUD與連貫操作】

來源:互聯網
上載者:User

標籤:

一、CRUD

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

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

  1、建立操作

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

    ·add()方法

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

    

    

    

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

    

    

    

    ·addAll()方法

    addAll()方法可以實現批量插入資料

  2、讀取操作

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

    ·讀取欄位(值,單一值)

    getField()方法

    讀取某一條記錄的某一個欄位返回的才是單一值

    

    

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

    

    

    

    

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

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

    

    

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

    select()方法或findAll()方法

    

    

    

  3、更新操作

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

    ·save()方法

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

    

    

    

    

    

    

    

    

    傳回值為受影響的行數,是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進行排序

  

  

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

  

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

  

  1、where()方法

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

  參數支援String、Aarry和Object類型

  2、table()方法

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

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

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

  

  

  

  3、data()方法

  用於向模型對象中傳遞資料,然後再進行建立、更新和刪除操作

  

  

  

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

  4、field()方法

  用於查詢操作中所查詢欄位的定義

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

  

  

  5、order()方法

  用於結果排序

  支援多個欄位排序

  參數支援String和Array類型(Array類型,鍵是欄位名,值是定序。若不指定值,則預設是升序)

  

  

  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類型

  而且在內部已經實現了重複欄位的消除處理了的

  

  11、distinct()方法

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

  參數支援Bool類型

  12、relation()方法

  用於關聯操作

  13、lock()方法

  用於資料庫中的鎖機制

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

  

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

ThinkPHP教程_PHP架構之ThinkPHP(八)【CRUD與連貫操作】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.