一、模型
之前开发一个功能,后端为在控制器(C)中写 php + SQL,前端为在页面(V)中写html + css + js,这就形成了 VC 架构。
但是发现,相同的数据逻辑(SQL)在不同的功能中可能被用到,所以可以把数据逻辑(SQL)单独提出来作为模型层(M),多个业务逻辑(php)可以复用。

(https://www.optbbs.com/forum.php?mod=viewthread&tid=12613221)
2. 模型的作用
2.1 方便数据校验和过滤
在应用开发中,比如表单提交等,经常需要对数据进行校验和过滤。thinkphp6的模型支持数据的校验和过滤,可以帮助开发者避免许多数据处理方面的问题。
2.2 便于代码重用和维护
在许多场景下,不同的功能需要实现相同的业务逻辑。使用模型,开发人员可以在一个地方实现相同的业务逻辑,提高了代码的重用性和维护性。
二、模型文件里的定义方法
注意:不要和 thinkphp 方法一样名称
1. 模型的名字
假设有一个table的名字为test,则模型的名字为Test
一个模型对应一个数据表,规则:驼峰式的

2. 新增一个模型文件Test.php
第一步:在 test 项目中创建目录,目录名:model
第二步:在 model 创建 Test.php 文件
第三步:Test.php 文件中引入think\Model
第四步:Test.php 文件中类的名字也为Test

三、增
模型文件
比如增加一个用户
public function doAddUser(){ // 返回新增的对象 $user = Test::create([ 'name' => 'shi', 'age' => 26 ]); // 自增的id echo $user->id; return $user; }
2. 控制器中调用模型
在test\controller中新建一个控制器文件,ModelTest.php
ModelTest.php中引入模型文件app\test\model\Test
public function addUser(){ $Test = new Test(); $result = $Test->doAddUser(); print($result); }

3. 运行

四、查
模型文件
比如查年龄大于18岁的用户
public function doGetUser(){ # 返回结果集 $users = Test::where('age','>=',18)->select(); return $users; }
2. 控制器文件
public function getUser(){ $Test = new Test(); $results = $Test->doGetUser(); print($results); }
3. 运行

五、改
模型文件
比如修改年龄大于18岁的用户的年龄为40
public function doUpdateUser(){ $user = Test::where('name', 'shi') ->where('age', '>=', 18) ->find();
print($user); $user->age = 40; // 返回影响的记录数 $result = $user->save(); print($user); return $result; }
2. 控制器文件
public function updateUser(){ $Test = new Test(); $results = $Test->doUpdateUser(); print($results); }
3. 运行

注:如果是要修改name字段,是修改不成功的,因为其与 “think\Model” 中的属性name冲突。建表时注意字段尽量避免使用 “think\Model” 中的属性。
https://blog.csdn.net/u013288190/article/details/132643809
六、删
模型文件
比如删除name为shi的所有用户
public function doDeleteUser(){ # 删除方法,返回删除的个数 $delete = Test::where('name', 'shi')->delete(); return $delete; }
2. 控制器文件
public function deleteUser(){ $Test = new Test(); $result = $Test->doDeleteUser(); print($result); }
3. 运行

七、模型的能力
1. 模型中也可以使用Db库
如
Db::name('user')->where('id','>',10)->select();
改成模型操作的话就变成
User::where('id','>',10)->select();
2. 除了代码复用,模型提供了获取器、修改器、搜索器、模型事件等功能
如,获取器的场景包括:
时间日期字段的格式化输出;
集合或枚举类型的输出;
数字状态字段的输出;
组合字段的输出;
例如,数据库中存储的状态是-1,0,1等数字,但是可以通过模型统一向外提供转换
- namespace app\model;
-
- use think\Model;
-
- class User extends Model
- {
- public function getStatusAttr($value)
- {
- $status = [-1=>'删除',0=>'禁用',1=>'正常',2=>'待审核'];
- return $status[$value];
- }
- }
请参考官方教程
https://www.kancloud.cn/manual/thinkphp6_0/1037588
八、参考:
https://blog.csdn.net/2301_76809965/article/details/130353013
https://blog.51cto.com/u_15067267/4677537
https://www.php.cn/faq/591280.html
https://cloud.tencent.com/developer/article/2138957
https://m.php.cn/faq/511616.html
软件工程小施同学
20230904