thinkphp6 入门(5)-- 模型是什么 怎么用

一、模型

  1. MVC架构

之前开发一个功能,后端为在控制器(C)中写 php + SQL,前端为在页面(V)中写html + css + js,这就形成了 VC 架构。

但是发现,相同的数据逻辑(SQL)在不同的功能中可能被用到,所以可以把数据逻辑(SQL)单独提出来作为模型层(M),多个业务逻辑(php)可以复用。

(https://www.optbbs.com/forum.php?mod=viewthread\&tid=12613221)

  1. 模型的作用

2.1 方便数据校验和过滤

在应用开发中,比如表单提交等,经常需要对数据进行校验和过滤。thinkphp6的模型支持数据的校验和过滤,可以帮助开发者避免许多数据处理方面的问题。

2.2 便于代码重用和维护

在许多场景下,不同的功能需要实现相同的业务逻辑。使用模型,开发人员可以在一个地方实现相同的业务逻辑,提高了代码的重用性和维护性。

二、模型文件里的定义方法

注意:不要和 thinkphp 方法一样名称

  1. 模型的名字

假设有一个table的名字为test,则模型的名字为Test

一个模型对应一个数据表,规则:驼峰式的

  1. 新增一个模型文件Test.php

第一步:在 test 项目中创建目录,目录名:model

第二步:在 model 创建 Test.php 文件

第三步:Test.php 文件中引入think\Model

第四步:Test.php 文件中类的名字也为Test

三、增

  1. 模型文件

    比如增加一个用户

    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);    }
  1. 运行

四、查

  1. 模型文件

    比如查年龄大于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. 运行

五、改

  1. 模型文件

    比如修改年龄大于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

六、删

  1. 模型文件

    比如删除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();
  1. 除了代码复用,模型提供了获取器、修改器、搜索器、模型事件等功能

如,获取器的场景包括:

  • 时间日期字段的格式化输出;

  • 集合或枚举类型的输出;

  • 数字状态字段的输出;

  • 组合字段的输出;

例如,数据库中存储的状态是-1,0,1等数字,但是可以通过模型统一向外提供转换

<?php
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

ThinkPHP6 模型 | 欧阳克博客

软件工程小施同学

20230904

相关推荐
空暝1 个月前
ThinkPHP的SQL注入漏洞学习
数据库·sql·学习·php·web·thinkphp
板栗妖怪1 个月前
thinkphp5之sql注入漏洞-builder处漏洞
学习·php·渗透·thinkphp·sql注入
逍遥蓝枫叶2 个月前
ThinkPHP6支持金仓数据库(Kingbase)解决无法使用模型查询问题
thinkphp·kingbase
frandiy2 个月前
【黑科技】:Laravel 项目性能提升 20 倍
php·laravel·thinkphp
疯子丶pony2 个月前
ThinkPHP一对一关联模型的运用(ORM)
php·thinkphp
张小勇2 个月前
thinkphp5多层with关联查询错误问题
thinkphp·fastadmin
张小勇3 个月前
thinkphp通过with查询,并通过关联表进行筛选
thinkphp·fastadmin
一一程序3 个月前
ThinkPHP-导入Excel表格(通用版)
php·excel·thinkphp·thinkphp导入excel
张小勇3 个月前
thinkphp单独为某个接口设置缓存
thinkphp
洪、3 个月前
记录一下PHP使用微信小程序支付
微信小程序·php·thinkphp