thinkphp 是一款開(kāi)源的基于php的web應(yīng)用框架,它提供了許多方便開(kāi)發(fā)的工具和解決方案,包括查詢(xún)語(yǔ)句的構(gòu)建和執(zhí)行。本文將介紹 thinkphp 中的查詢(xún)語(yǔ)句功能,包括查詢(xún)構(gòu)建器和數(shù)據(jù)模型,幫助開(kāi)發(fā)者更有效地進(jìn)行數(shù)據(jù)庫(kù)操作。
一、查詢(xún)構(gòu)建器
ThinkPHP 的查詢(xún)構(gòu)建器是一套面向對(duì)象的 sql 語(yǔ)句構(gòu)建器,用于快速構(gòu)建復(fù)雜 SQL 語(yǔ)句。在查詢(xún)構(gòu)建器中,可以通過(guò)使用多種方法來(lái)構(gòu)建 select、UPDATE、INSERT 和 delete 等類(lèi)型的 SQL 語(yǔ)句。
- SELECT 查詢(xún)語(yǔ)句
使用 SELECT 查詢(xún)語(yǔ)句可以獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)。可以使用查詢(xún)構(gòu)建器的 select() 方法來(lái)構(gòu)建 SELECT 查詢(xún)語(yǔ)句:
// 查詢(xún)所有用戶(hù)數(shù)據(jù) Db::name('user')->select(); // 查詢(xún) id 為 1 的用戶(hù)數(shù)據(jù) Db::name('user')->where('id', 1)->find(); // 查詢(xún)年齡大于 18 歲的用戶(hù)數(shù)據(jù) Db::name('user')->where('age', '>', 18)->select();
在上面的代碼中,Db::name(‘user’) 表示要查詢(xún)的數(shù)據(jù)表。select() 方法表示查詢(xún)所有數(shù)據(jù);find() 方法表示查詢(xún)單條記錄。
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
- UPDATE 查詢(xún)語(yǔ)句
使用 UPDATE 查詢(xún)語(yǔ)句可以更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)。可以使用查詢(xún)構(gòu)建器的 update() 方法來(lái)構(gòu)建 UPDATE 查詢(xún)語(yǔ)句:
// 更新 id 為 1 的用戶(hù)數(shù)據(jù) Db::name('user')->where('id', 1)->update(['name' => 'Tom']); // 將所有用戶(hù)的角色都更新為 2 Db::name('user')->update(['role_id' => 2]);
在 update() 方法中,第一個(gè)參數(shù)表示要更新的記錄的條件,第二個(gè)參數(shù)為更新的數(shù)據(jù)內(nèi)容。
- INSERT 查詢(xún)語(yǔ)句
使用 INSERT 查詢(xún)語(yǔ)句可以向數(shù)據(jù)庫(kù)中插入新數(shù)據(jù)。可以使用查詢(xún)構(gòu)建器的 insert() 方法來(lái)構(gòu)建 INSERT 查詢(xún)語(yǔ)句:
// 向 user 表中插入一條新數(shù)據(jù) Db::name('user')->insert(['name' => 'Jack', 'age' => 20, 'role_id' => 1]);
在 insert() 方法中,參數(shù)為要插入的新數(shù)據(jù)內(nèi)容。
- DELETE 查詢(xún)語(yǔ)句
使用 DELETE 查詢(xún)語(yǔ)句可以刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)。可以使用查詢(xún)構(gòu)建器的 delete() 方法來(lái)構(gòu)建 DELETE 查詢(xún)語(yǔ)句:
// 刪除 id 為 1 的數(shù)據(jù) Db::name('user')->where('id', 1)->delete(); // 刪除所有角色為 3 的用戶(hù)數(shù)據(jù) Db::name('user')->where('role_id', 3)->delete();
在 delete() 方法中,參數(shù)為要?jiǎng)h除的記錄的條件。
二、數(shù)據(jù)模型
除了查詢(xún)構(gòu)建器之外,ThinkPHP 還提供了一套基于數(shù)據(jù)模型的數(shù)據(jù)庫(kù)操作方式,該方式可以將數(shù)據(jù)表映射成為一個(gè)類(lèi),并且可以根據(jù)類(lèi)屬性的變化自動(dòng)處理數(shù)據(jù)庫(kù)記錄的 CRUD。
- 定義數(shù)據(jù)模型
可以使用以下代碼定義一個(gè)數(shù)據(jù)模型類(lèi):
namespace appcommonmodel; use thinkModel; class User extends Model { // 數(shù)據(jù)表名 protected $table = 'user'; // 自動(dòng)寫(xiě)入時(shí)間戳 protected $autoWriteTimestamp = true; // 模型關(guān)聯(lián):用戶(hù)角色 public function role() { return $this->belongsTo(Role::class, 'role_id'); } }
在上面的示例中,我們通過(guò)繼承 thinkModel類(lèi)來(lái)定義了一個(gè)用戶(hù)數(shù)據(jù)模型類(lèi)。其中 $table 屬性表示要映射的數(shù)據(jù)表名,$autoWriteTimestamp 屬性表示是否自動(dòng)寫(xiě)入時(shí)間戳。
- 查詢(xún)數(shù)據(jù)
我們可以使用數(shù)據(jù)模型的 find()、select()、where() 等方法來(lái)查詢(xún)數(shù)據(jù)庫(kù):
// 查詢(xún) id 為 1 的用戶(hù)數(shù)據(jù) $user = User::find(1); // 查詢(xún)用戶(hù)表中所有數(shù)據(jù) $users = User::select(); // 查詢(xún)年齡大于 18 歲的用戶(hù)數(shù)據(jù) $users = User::where('age', '>', 18)->select();
在上面的示例中,我們使用了數(shù)據(jù)模型類(lèi)的靜態(tài)方法來(lái)進(jìn)行數(shù)據(jù)庫(kù)查詢(xún)。
- 更新和插入數(shù)據(jù)
我們可以使用數(shù)據(jù)模型的 save() 方法來(lái)更新和插入數(shù)據(jù):
// 更新 id 為 1 的用戶(hù)數(shù)據(jù) $user = User::find(1); $user->name = 'Tom'; $user->save(); // 向 user 表中插入一條新數(shù)據(jù) $user = new User; $user->name = 'Jack'; $user->age = 20; $user->role_id = 1; $user->save();
在上面的示例中,我們使用數(shù)據(jù)模型對(duì)象的屬性來(lái)設(shè)置要更新或插入的數(shù)據(jù),然后調(diào)用 save() 方法提交到數(shù)據(jù)庫(kù)中。
- 刪除數(shù)據(jù)
我們可以使用數(shù)據(jù)模型的 delete() 方法來(lái)刪除數(shù)據(jù):
// 刪除 id 為 1 的用戶(hù)數(shù)據(jù) $user = User::find(1); $user->delete(); // 刪除所有角色為 3 的用戶(hù)數(shù)據(jù) User::where('role_id', 3)->delete();
在上面的示例中,我們使用了數(shù)據(jù)模型對(duì)象的 delete() 方法刪除指定記錄,也可以使用靜態(tài)方法的 where() 方法來(lái)選擇要?jiǎng)h除的記錄,然后調(diào)用 delete() 方法刪除。
總結(jié)