ThinkPHP5.0數據庫CURD的刪除(Delete)操作和使用鏈式方法

刪除操作指對數據表的單個記錄或者多個記錄的刪除操作,示例代碼如下:

// 刪除數據

Db::name('data')

->where('id', 18)

->delete();

和更新操作一樣,ThinkPHP不允許使用無條件刪除操作,如果不帶條件可以直接使用主鍵刪除:

// 刪除數據

Db::name('data')

->delete(18);

// 刪除多條數據

Db::name('data')

->delete([1, 5, 8]);

如果你確定要執行無條件刪除操作, 可以使用下面的方式:

// 刪除所有數據

Db::name('data')

->delete(true);

事實上,對於業務數據表,基本上不建議使用刪除操作,而是使用軟刪除(邏輯刪除,其實執行的是數據表的更新操作)替代實際的物理刪除。

掌握了基本的CURD操作後,我們就來熟悉下鏈式方法的概念,其實就是前面我們提到的輔助查詢方法。首先鏈式方法的目的是為了讓查詢更清晰和直觀,下面的兩個代碼實現哪個更清晰易懂大家可以比較下。

ThinkPHP5.0數據庫CURD的刪除(Delete)操作和使用鏈式方法

事實上,我們前面使用的table、where、limit之類的方法都稱之為鏈式方法,辨別一個方法是否屬於鏈式方法的一個顯著特徵就是看這個方法是否返回當前的對象實例。正因為鏈式操作方法返回的是當前對象實例,所以不同的鏈式方法在調用的順序上沒有先後的概念,但相同的鏈式方法調用順序會影響最終的查詢,下面的兩個例子完全等效:

ThinkPHP5.0數據庫CURD的刪除(Delete)操作和使用鏈式方法

上面兩個查詢最終生成的SQL語句是完全相同的。但下面兩個查詢最終生成的SQL是不同的

ThinkPHP5.0數據庫CURD的刪除(Delete)操作和使用鏈式方法

多個where方法和order方法的調用順序最終影響了生成的SQL語句,雖然有時候並不會影響查詢結果。上面的兩個例子where方法的順序並不會影響查詢條件,而order方法的順序則改變了最終數據的排序。鏈式方法的調用順序取決於你的思維習慣或者說團隊規範。


分享到:


相關文章: