• 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)

    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

    图片

    三、增

    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);    }

    图片

    3. 运行

    图片

    四、查

    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();

    2. 除了代码复用,模型提供了获取器、修改器、搜索器、模型事件等功能

    如,获取器的场景包括:

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

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

    • 数字状态字段的输出;

    • 组合字段的输出;

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

    1. namespace app\model;
    2. use think\Model;
    3. class User extends Model
    4. {
    5. public function getStatusAttr($value)
    6. {
    7. $status = [-1=>'删除',0=>'禁用',1=>'正常',2=>'待审核'];
    8. return $status[$value];
    9. }
    10. }

    请参考官方教程

    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

  • 相关阅读:
    【ESP32蓝牙通信】gatt_client 和 gatt_server 调试
    Linux中 vim 编辑器的使用
    【关于Tomcat那些不得不知道的事儿】
    Armbian 23.11(Ubuntu 22.04)安装glances不显示docker容器状态解决办法
    三维重建---第四章 三维重建及极几何
    【K8S专栏】什么是云原生?
    Linux 使用用户级别的 systemd 服务
    【python基础】类-初识类
    Eudic欧路词典 for Mac(可离线英语学习工具)
    边缘计算开源平台综述
  • 原文地址:https://blog.csdn.net/u013288190/article/details/132679190