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等数字,但是可以通过模型统一向外提供转换

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/120532.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建筑安全运行监测,预防建筑潜在风险

建筑物是人们生活和工作的场所&#xff0c;其安全性直接关系到人们的生命财产安全。建筑安全运行监测旨在及时发现和识别潜在的安全隐患&#xff0c;以确保建筑物的稳定运行&#xff0c;其重要性不可低估。 建筑安全运行监测可以帮助及早发现结构问题。随着时间的推移&#xff…

优化Docker权限管理:配置Docker用户组

Docker 利用 Linux 的用户和组权限来管理对 Docker 守护进程的访问权限。一般情况下&#xff0c;只有 root 用户和属于 docker 用户组的用户才被允许访问 Docker 守护进程。在 Linux 系统上使用 Docker 时&#xff0c;如果您尚未配置 docker 用户组&#xff0c;那么作为非 root…

企业级智能PDF及文档处理SDK GdPicture.NET 14.2 Crack

企业级智能PDF及文档处理SDK GdPicture.NET 提供了一组非常先进的 API&#xff0c;这些 API 利用了人工智能、机器学习和模糊逻辑算法等尖端技术。经过超过 15 年的持续研究和对创新的专注&#xff0c;我们的 SDK 已成为市场上针对PDF、OCR、条形码、文档成像和各种格式最全面的…

大数据成为市场营销利器 ,促进金融贷款企业获客精准化

随着大数据技术的不断普及&#xff0c;中国对尖端技术和云计算技术的投资大幅增加。大数据、云计算技术、物联网等一系列新一代信息技术也加速完善。 目前&#xff0c;大数据技术也非常成熟&#xff0c;大数据的应用领域也多种多样。大数据的重要方面“运营商大数据”已经被政…

R语言应用interactionR包进行亚组相加交互作用分析

在统计分析中交互作用是指某因素的作用随其他因素水平变化而变化&#xff0c;两因素共同作用不等于两因素单独作用之和(相加交互作用)或之积(相乘交互作用)。相互作用的评估是尺度相关的&#xff1a;乘法或加法。乘法尺度上的相互作用意味着两次暴露的综合效应大于&#xff08;…

java八股文面试[JVM]——JVM性能优化

JVM性能优化指南 JVM常用命令 jps 查看java进程 The jps command lists the instrumented Java HotSpot VMs on the target system. The command is limited to reporting information on JVMs for which it has the access permissions. jinfo &#xff08;1&#xff09;实时…

UniTask保姆级教程

目录 一、UniTask的简介和安装 https://github.com/Cysharp/UniTask.gitpathsrc/UniTask/Assets/Plugins/UniTask 空载性能测试 二、基础用法详解 三、基础用法扩展 四、进阶 五、VContainer简介 六、VContainer基础实例 方便快速查找 一、UniTask的简介和安装 项目地…

Medium: Where to Define Qualified users in A/B testing?

1. Common AB Testing Setup Issue (Framework) 局限性: unqualified users will also be considered and mess up experimentation results.

【力扣周赛】第 112 场双周赛

文章目录 竞赛链接Q1&#xff1a;7021. 判断通过操作能否让字符串相等 IQ2&#xff1a;7005. 判断通过操作能否让字符串相等 II&#xff08;贪心&#xff09;Q3&#xff1a;2841. 几乎唯一子数组的最大和竞赛时代码——滑动窗口 Q4&#xff1a;8050. 统计一个字符串的 k 子序列…

【设备树笔记整理7】实践操作

1 使用设备树给DM9000网卡_触摸屏指定中断 1.1 修改方法 根据设备节点的compatible属性&#xff0c;在驱动程序中构造/注册 platform_driver&#xff0c;在 platform_driver 的 probe 函数中获得中断资源。 1.2 实验方法 以下是修改好的代码&#xff1a;第6课第1节_网卡_触摸…

SIEM 中不同类型日志监控及分析

安全信息和事件管理&#xff08;SIEM&#xff09;解决方案通过监控来自网络的不同类型的数据来确保组织网络的健康安全状况&#xff0c;日志数据记录设备上发生的每个活动以及整个网络中的应用程序&#xff0c;若要评估网络的安全状况&#xff0c;SIEM 解决方案必须收集和分析不…

C/C++源程序到可执行程序exe的全过程(及汇编和反汇编的区别)

1.C/C源程序到可执行程序exe的全过程&#xff08;及汇编和反汇编的区别&#xff09; 一个现代编译器的主要工作流程如下&#xff1a; 源程序&#xff08;source code&#xff09;→预处理器&#xff08;preprocessor&#xff09;→编译器&#xff08;compiler&#xff09;→汇…

解决uniapp手机真机调试时找不到手机问题

1、检查 USB 调试是否开启 2、检查是否有选择 文件 传输 选项 3、如果上述都做了还找不到&#xff0c;可以看看开发者选项中的【USB设置】&#xff0c;把模式改为 MIDI 模式

ToBeWritten之ATTCK 场景实践

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

PHP8创建数组-PHP8知识详解

在php 8中&#xff0c;您可以使用以下方法创建数组&#xff1a;使用数组字面量创建数组、使用 array() 函数创建数组、通过赋值的方式创建数组、使用array_push()函数将元素添加到数组末尾、使用range()函数创建数值数组、使用compact()函数创建带有变量名的数组、使用array_fi…

基于PyTorch的交通标志目标检测系统

一、开发环境 Windows 10PyCharm 2021.3.2Python 3.7PyTorch 1.7.0 二、制作交通标志数据集&#xff0c;如下图 三、配置好数据集的地址&#xff0c;然后开始训练 python train.py --data traffic_data.yaml --cfg traffic_yolov5s.yaml --weights pretrained/yolov5s.pt --e…

深入理解线段树

大家好&#xff0c;我是 方圆。线段树&#xff08;Segment Tree&#xff09; 是常用的维护 区间信息 的数据结构&#xff0c;它可以在 O(logn) 的时间复杂度下实现单点修改、区间修改、区间查询&#xff08;区间求和、区间最大值或区间最小值&#xff09;等操作&#xff0c;常用…

发生OOM时JVM会退出吗

程序是否退出和发生 OOM 无关 需要明确&#xff0c;程序是否退出和发生 OOM 无关&#xff0c;而和当前是否还有存活的非守护线程有关。 只要还有运行中的子线程&#xff0c;即使 main 线程结束或异常崩溃了&#xff0c;程序也不会停止。 public class TestThreadRun {privat…

Ubuntu下Python3与Python2相互切换

参考文章&#xff1a;https://blog.csdn.net/Nicolas_shen/article/details/124144931 设置优先级 sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 200

Spring Cloud--从零开始搭建微服务基础环境【四】

&#x1f600;前言 本篇博文是关于Spring Cloud–从零开始搭建微服务基础环境【四】&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;…