ThinkPHP 數(shù)據(jù)庫操作
1. 前言
本小節(jié)介紹如何使用 ThinkPHP 框架對數(shù)據(jù)庫進(jìn)行增刪該查
操作,并且實現(xiàn)幾個和學(xué)生信息表相關(guān)的接口來加深對路由 POST
、GET
、DELETE
、PUT
的理解。
在 MySQL
中的 select
、delete
、update
、insert
就分別對應(yīng)著 ThinkPHP
中的 select()
、delete()
、update()
、insert()
方法,使用者只需要按照某種規(guī)范和格式書寫代碼,框架底層會自動幫你生成對應(yīng)的 SQL
語句然后交給 MySQL
這樣的數(shù)據(jù)庫執(zhí)行并返回結(jié)果。
2. 新建數(shù)據(jù)模型
首先在 app
目錄下新建一個 Models
目錄,然后在 Models
目錄下新建一個 Study
目錄,在 Study
目錄新建模型 CourseModel
、StudentModel
、TeacherModel
、StudentCourseModel
,新建 CourseModel
模型如下圖所示:
Tips: 模型類需要繼承
think\Model
類,$table = 'course'
表示該模型表名course
,可以按照上面的方法新建其他幾個模型。
3. 添加學(xué)生數(shù)據(jù)接口
3.1 定義路由
首先在 study.php
路由文件添加 POST
路由如下圖所示:
Tips:
post
表示添加數(shù)據(jù),客戶端調(diào)用該接口必須使用POST
請求方式,路由指向的控制器是app\controller\Study\StudentController
,方法名是addStudent()
。
3.2 新建控制器
接下來在 app\controller\Study\
目錄中添加 StudentController
控制器如下圖所示:
3.3 定義路由指向的方法
下面定義一下路由里面指向的 addStudent()
方法,方法如下:
<?php
namespace app\controller\Study;
use app\BaseController;
use app\Models\Study\StudentModel;
class StudentController extends BaseController
{
/**
* 添加學(xué)生接口
*/
public function addStudent()
{
//接收請求過來的姓名字段
$name = (string)$this->request->param('name');
//接收請求過來的年齡字段
$age = (int)$this->request->param('age');
//接口請求過來的身份證字段
$id_number = (string)$this->request->param('id_number');
try {
$student = new StudentModel();
$student->name = $name;
$student->age = $age;
$student->id_number = $id_number;
$student->created_at = time(); //時間戳,表示數(shù)據(jù)入庫時間
$student->status = 1;
$student->save();
} catch (\Exception $exception) {
return json("學(xué)生數(shù)據(jù)入庫失敗" . $exception->getMessage(), 404);
}
return json("添加成功");
}
}
Tips: 其中
$student = new StudentModel()
表示實例化StudentModel
模型類,然后給這個模型類的屬性賦值,使用模型類的save()
方法就可以向student
表添加數(shù)據(jù)了,注意實例化模型類之后給模型對象屬性賦值需要和數(shù)據(jù)庫字段保持一致。
3.4 請求接口添加學(xué)生數(shù)據(jù)
如下圖所示,可以在 postman
請求上述定義好的學(xué)生添加接口,并且?guī)闲枰砑拥膮?shù)字段,字段名需要個上面接收的一致:
{
"name" : "愛因詩賢",
"age" : 18,
"id_number" : "42011720100512065X"
}
請求如下圖所示:
添加成功之后就可以在數(shù)據(jù)庫表中查看到新增的學(xué)生數(shù)據(jù)了:
4. 獲取學(xué)生接口
4.1 定義路由
上面已經(jīng)定義好了學(xué)生相關(guān)的控制器,獲取學(xué)生接口只需要定義路由和方法即可,路由定義如下圖所示:
4.2 定義方法
下面定義一下路由里面指向的 getStudent()
方法,方法如下:
// 獲取單個學(xué)生信息
public function getStudent()
{
$student_id = (int)$this->request->param('student_id');
if (!$student_id) {
return json('參數(shù)不合法', 404);
}
//查詢單條數(shù)據(jù)
$student = StudentModel::where('id', $student_id)->where('status', 1)->find();
if (empty($student)) {
return json('學(xué)生信息不存在', 404);
}
//把時間戳轉(zhuǎn)化為可讀的日期格式
$student->created_at = date("Y-m-d H:i", $student->created_at);
return json($student);
}
Tips: 其中
where('id',$student_id)
表示使用id=$student_id
查詢,find()
方法表示查詢單條。
4.3 請求接口獲取學(xué)生信息
如下圖所示,可以在 postman
請求上述定義好的獲取,并且?guī)闲枰砑拥膮?shù)字段,字段名需要個上面接收的一致:
5. 修改學(xué)生信息接口
5.1 定義路由
上面已經(jīng)定義好了學(xué)生相關(guān)的控制器,獲取學(xué)生接口只需要定義路由和方法即可,路由定義如下圖所示:
5.2 定義方法
下面定義一下路由里面指向的 updateStudent()
方法,方法如下:
// 修改學(xué)生信息接口
public function updateStudent()
{
$student_id = (int)$this->request->param('student_id');
//接收請求過來的姓名字段
$name = (string)$this->request->param('name');
//接收請求過來的年齡字段
$age = (int)$this->request->param('age');
//接口請求過來的身份證字段
$id_number = (string)$this->request->param('id_number');
if (!$student_id) {
return json('參數(shù)不合法', 404);
}
//查詢單條數(shù)據(jù)
$student = StudentModel::where('id', $student_id)->where('status', 1)->find();
if (empty($student)) {
return json('學(xué)生信息不存在', 404);
}
try {
$student->name = $name;
$student->age = $age;
$student->id_number = $id_number;
$student->update_at = time(); //時間戳,表示數(shù)據(jù)更新時間
$student->save();
} catch (\Exception $exception) {
return json("學(xué)生數(shù)據(jù)修改失敗" . $exception->getMessage(), 404);
}
return json("更新成功");
}
Tips: 此時
save()
方法表示的是更新數(shù)據(jù),只需要復(fù)制被更新的字段。
5.3 請求接口修改學(xué)生信息
如下圖所示,可以在 postman
請求上述定義好的獲取,并且?guī)闲枰砑拥膮?shù)字段,字段名需要個上面接收的一致:
更新成功之后就可以在數(shù)據(jù)庫表中查看到新修改的學(xué)生數(shù)據(jù)了:
6. 刪除學(xué)生接口
6.1 定義路由
上面已經(jīng)定義好了學(xué)生相關(guān)的控制器,獲取學(xué)生接口只需要定義路由和方法即可,路由定義如下圖所示:
6.2 定義方法
下面定義一下路由里面指向的 deleteStudent()
方法,方法如下:
// 刪除學(xué)生
public function deleteStudent()
{
$student_id = (int)$this->request->param('student_id');
if (!$student_id) {
return json('參數(shù)不合法', 404);
}
//查詢單條數(shù)據(jù)
$student = StudentModel::where('id', $student_id)->where('status', 1)->find();
if (empty($student)) {
return json('學(xué)生信息不存在', 404);
}
$student->status = 2;
$student->save();
return json("刪除成功");
}
Tips: 此時
save()
方法表示的是更新數(shù)據(jù),并且刪除是用的軟刪除
。
6.3 請求接口刪除學(xué)生
如下圖所示,可以在 postman
請求上述定義好的獲取,并且?guī)闲枰砑拥膮?shù)字段,字段名需要個上面接收的一致:
更新成功之后就可以在數(shù)據(jù)庫表中查看到被 軟刪除
的學(xué)生數(shù)據(jù)了:
7.小結(jié)
本小節(jié)介紹了如何新建一個數(shù)據(jù)庫模型類,然后分別定義了學(xué)生信息相關(guān)的增刪改查接口,分別對應(yīng)了 POST
、DELETE
、PUT
、GET
請求方式,接口地址相同,但是請求方式不同,會請求到不同指定的方法處理不同的事情。
Tips: 代碼倉庫:https://gitee.com/love-for-poetry/tp6