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