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

2023-11-16

一、模型

  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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

thinkphp6 入门(5)-- 模型是什么 怎么用 的相关文章

  • 显式删除会话cookie会产生什么影响?

    我使用 php session 来维护用户的会话 Session 在登录后创建 在注销或超时后销毁 我需要管理面板中的一个选项来强制注销任何用户 如果他在网站上处于活动状态 我怎样才能做到这一点 我正在考虑删除临时会话文件 这应该有效地破坏
  • 合并 url 中的 2 个输入值

    我有这样的形式
  • Doctrine DQL 从 join 返回平面数组

    我通过 DQL 中的常规 LEFT JOIN 选择 3 个实体 它们通过连接表关联 连接表还定义了实体以及带注释的关系 查询执行没有问题 但我的结果作为平面数组返回 我期望一个包含三个实体作为每个索引的数组元素的数组 SELECT e1 e
  • 获取今天的科普特日期

    我正在寻找获取今天的科普特日期与任何代码类型类似php or javascript在我的网站标题中显示科普特日期 我需要阿拉伯语或英语版本 我试图找到它 但没有找到类似的英文内容 参考 http www copticchurch net e
  • 如何在 CakePHP 中“验证”人名?

    我有一个 PHP 脚本 应该检查 有效 的人名 但最近破解了带有空格的名称 因此我们向验证器添加了空格 除了这样做之外 有没有办法向 CakePHP 的验证器添加黑名单以阻止所有 无效 字符 而不是允许 有效 字符 注意 我 通常 知道如何
  • php中的$$是什么意思? [复制]

    这个问题在这里已经有答案了 变量后面的两个背对背 是什么意思 像这样 id 我在哪里可以找到更多相关信息 谢谢 In PHP 意味着您将给至少一名维护程序员带来多年的痛苦和折磨 请注意 您最终可能会成为维护程序员 它是一个可变变量 想象一下
  • xdebug.remote_handler 在 PHP.INI 中设置,但未在 PHPinfo 中显示

    我正在尝试让 Xbdebug 与 NetBeans 一起运行 以便调试一些 PHP 代码 我确信几年前我已经让它工作了 然后切换了 IDE 现在想切换回来 When I try to debug the status bar shows 并
  • 自定义帖子类型的 WordPress 自定义字段

    过去有几个人出现过这个问题 但他们的问题的解决方案对我来说不起作用 我已经尝试了很多 在 WordPress 中 我创建了 3 种自定义帖子类型 1 代表 视频 新闻 和 音乐 每个内容都发布到自己的页面 我想添加自定义字段 这样我就可以为
  • Laravel 从 API 响应中删除标头值

    Laravel 应用程序版本 5 6 我希望从 API 响应中显示的 Cache Control 标头中删除 private 值 我有一个中间件添加 无缓存 和 无存储 值 response next request response gt
  • Laravel/00webhost 错误 404。在此服务器上找不到请求的 URL

    1 将我的文件上传到 000webhost 我将公用文件夹中的所有文件放置到公共 html然后我创建了一个名为laravel我在那里上传了所有其他文件 这是我的目录结构 laravel app 引导程序 config 公共 html 索引
  • 带 url 参数的 Laravel post 路由

    我面临着幼虫路由的大墙 我似乎找不到解决方案 我在视图模板中有此表单
  • Laravel 登录后重定向回来

    登录后如何重定向返回页面 在 Laravel 5 2 中 认证控制器 protected redirectTo 重定向用户
  • 如何在同一 PHP 页面上多次使用 mysqli fetch_assoc() 和准备好的语句?

    有没有办法启用fetch assoc 在同一页上多次使用准备好的语句 data conn gt prepare SELECT FROM some table WHERE id data gt bind param i id data gt
  • 使用 :hover 作为元素的内联样式(使用 HTML/CSS/php)[重复]

    这个问题在这里已经有答案了 可能的重复 如何将 a hover 规则嵌入到文档中间的样式属性中 https stackoverflow com questions 131653 how do i embed an ahover rule i
  • 使用 yum 和 pear 安装 php-soap 均失败

    我正在尝试在 Centos 6 4 服务器上安装 PHP 的 SOAP 扩展 我对包管理器 从 CLI 安装包并在 PHP 中配置它们相当不熟悉 我相当有能力管理 php ini 和其他 PHP 配置文件 soap ini 等 我尝试使用以
  • PHP Intl 扩展线程安全吗?

    我一直在阅读有关 PHP 中的语言环境的内容 看起来setlocale 线程有问题 我对线程不太熟悉 文档提到它不是线程安全的 我想让我的项目能够处理某些数字格式 并且 Intl 扩展似乎很有趣 http php net manual en
  • 点击 %40 变为 %2540

    当单击包含 符号的链接时 该网址给我 40 这就是我想要的 但是一旦我点击它 一秒钟后它就在我点击后变成了 2540 单击是在电子邮件内 然后定向到网站 其中 40 更改为 2540 我怎样才能让它停止变化 它现在得到这样的参数 email
  • 使用 ImageMagick (PHP) 将 2 个图像并排合并为 1 个图像

    我认为这是一件容易的事 我有 2 张图片 JPG 我希望它们合并成一张图片 其中 2 张图片并排 所以我有图片 A 和图片 B 我想要图片 AB 并排 两个图像具有相同的宽度和高度 在本例中 宽度 200px 高度 300px 但是第二个图
  • 禁用 WooCommerce 手动/编辑订单的电子邮件通知

    需要 WooCommerce 专业知识 我需要禁用手动创建的订单的电子邮件通知 我必须使用处理状态 由于处理订单状态的自定义挂钩 我无法创建自定义状态 理想情况下 手动订单页面中可以勾选一个复选框 勾选后 它将禁止在每种状态下向客户发送电子
  • PHP条件,如果当前页面,则链接突出显示[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有一个带

随机推荐