ThinkPHP模型操作下

ThinkPHP模型操作下

  • 前言
    • 1. 模型设置
        • 1.name(数据表除去前后缀的名字,默认是当前model的类名)
        • 2.table(完整的数据表名)
        • 3.pk 改变主键名称
        • 4.schema 设置模型对应数据表字段及类型
        • 5.disuse 数据表废弃字段(数组)
        • 6.模型的其他属性
    • 2. 模型的主要功能
        • 1.获取器
        • 2.修改器
        • 3. 搜索器
        • 4. 检查数据
    • 3.模型事件
  • 总结

前言

model最重要的操作如下所示:


1. 模型设置

基本的模型设置,如下是最基本的模型设置:(模型设置就是在代码中进行设置,去覆盖掉我们在config进行的设置

在这里插入图片描述

模型的设置都是在类名中直接进行设置的

1.name(数据表除去前后缀的名字,默认是当前model的类名)

  • app/model/Cat.php
<?php
namespace app\model;

use think\model;

class Cat extends model
{
    protected $name = 'goods';
    public function findArr()   
    {
        $result = Cat::select();
        return $result;
    }
}

2.table(完整的数据表名)

  • app/model/Cat.php
<?php
namespace app\model;

use think\model;

class Cat extends model
{
    protected $table = 'shop_goods';
    public function findArr()   
    {
        $result = Cat::select();
        return $result;
    }
}

3.pk 改变主键名称

  • model 默认的主键是id
  • app/model/Cat.php
<?php
namespace app\model;

use think\model;

class Cat extends model
{
    protected $name = 'admin';
    protected $pk = 'uid';
    public function findArr()   
    {
        $result = Cat::select();
        return $result;
    }
}

4.schema 设置模型对应数据表字段及类型

  • 默认会自动获取(包括字段类型),但自动获取会导致增加一次查询
  • schema 属性一旦定义,就必须定义完整的数据表字段类型
  • 类型根据php数据类型定义,如果是json类型直接定义为json即可
  • app/model/Cat.php
class Goods extends Model{
    protected $name = 'Goods';
    protected $table = 'shop_goods';
    protected $pk = 'shop_id';
    protected $schema = [
        'shop_id' => 'int',
        'cat' => 'int',
        'title' => 'string',
        'price' => 'float',
        'discount' => 'int',
        'stock' => 'int',
        'status' => 'int',
        'add_time' => 'int'
    ];
    # 对某个字段定义需要自动转换的类型,可以使用type属性
    protected $type = [
        'shop_id' => 'int'
    ];
    public function select(){
        $select = Goods::select();
        return $select->toArray();
    }
}

5.disuse 数据表废弃字段(数组)

  • app/model/Cat.php
class Goods extends Model{
    protected $name = 'Goods';
    protected $table = 'shop_goods';
    protected $pk = 'shop_id';
    protected $disuse = [
        'discount',
        'stock'
    ];
    public function select(){
        $select = Goods::select();
        return $select->toArray();
    }
}

6.模型的其他属性

在这里插入图片描述

2. 模型的主要功能

1.获取器

  • 获取器的作用是对模型实例的(原始)数据做出自动处理
  • 命名规则:get + 字段名 + Attr
  • 字段名是数据表字段的驼峰转换
  • app/model/Goods.php
class Goods extends Model{
    public function index(){
        $find = Goods::find(10);
        echo $find->status;
        return $find->toArray();
    }
    public function getStatusAttr($v){
        $status = [
            1=>'开启',
            2=>'关闭'
        ];
        return $status[$v];
    }
}

2.修改器

  • 修改器的主要作用是对模型设置的数据对象值进行处理
  • 命名规则: set + 字段名 + Attr
  • app/model/Goods.php
class Goods extends Model{
    public function index(){
        $create = Goods::create([
            'cat' =>  3.33,
            'title' =>  '新商品',
            'price' =>  '59.99',
            'add_time' => time()
        ]);
        return $create;
    }
    public function setCatAttr($v,$all){
        // $all 全部参数
        return (int)$v;
    }
}

3. 搜索器

  • 搜索器的作用是用于封装字段(或者搜索标识)的查询条件表达式
  • 命名规则: search + 字段名 + Attr
  • app/model/Goods.php
class Goods extends Model{
    public function index(){
        $select = Goods::withSearch(['title'],[
            'title' => '新'
        ])->select();
        return $select->toArray();
    }
    public function searchTitleAttr($query,$v){
        $query->where('title','like', $v . '%');
    }
}

4. 检查数据

  • 如果要判断数据集是否为空,不能直接使用 empty 判断
  • 必须使用数据集对象的 isEmpty 方法判断
  • app/model/Goods.php
class Goods extends Model{
    public function index(){
        $select = Goods::where('title','1')->select();
        if(empty($select)){
            echo 111;
        }
        if($select->isEmpty()){
            echo 111;
        }
    }
}

3.模型事件

模型事件是指在模型被调用之前发生的一系列操作

在这里插入图片描述

namespace app\model;
use think\Model;
class Goods extends Model{
    public function one_update(){
        $update = Goods::update(
            ['price'=>'99.99'],
            ['id'=>22]
        );
        return $update;
    }
    # 执行更新操作,就会之下onBeforeUpdate方法
    public static function onBeforeUpdate($goods){
        print_r($goods->price);
        return true;
    }
}

总结

当要完成某一项功能的时候,就可以使用model,这样调用model就可以完成一系列功能

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

E5EAA HENF105240R1将用于工业生产过程的测量、控制和管理

​E5EAA HENF105240R1将用于工业生产过程的测量、控制和管理 工业控制计算机是工业自动化控制系统的核心设备 工业控制计算机是工业自动化设备和信息产业基础设备的核心。传统意义上&#xff0c;将用于工业生产过程的测量、控制和管理的计算机统称为工业控制计算机&#xff0c;…

JVM学习(八):运行时数据区——虚拟机栈(字节码程度深入剖析)

目录 一、概述 1.1 基于栈结构的虚拟机 1.2 栈和堆 二、虚拟机栈&#xff08;Java Virtual Machine Stack&#xff09;详述 2.1 虚拟机栈介绍 2.2 虚拟机栈作用 2.3 虚拟机栈特点 三、栈中常见的异常 3.1 StackOverflowError异常 3.2 OutOfMemoryError异常 四、…

Linux驱动开发:uboot启动流程详解

前言&#xff1a;uboot作为Linux驱动开发的 “三巨头” 之一&#xff0c;绝对是一座绕不开的大山。当然&#xff0c;即使不去细致了解uboot启动流程依旧不影响开发者对uboot的简单移植。但秉持着知其然知其所以然的学习态度&#xff0c;作者将给读者朋友细致化的过一遍uboot启动…

UE4 架构初识(二)

目录 UE4 引擎学习 一、架构基础 1. Pawn &#xff08;1&#xff09;DefaultPawn &#xff08;2&#xff09;SpectatorPawn &#xff08;3&#xff09;Character 2. AController 3. APlayerState 4. 总结 UE4 引擎学习 一、架构基础 1. Pawn UE也是从Actor中再派生…

【小程序】input输入双向数据绑定

小程序中&#xff0c;input标签中的数据为单向绑定&#xff1a; <inputtype"number"bindinput"inputRealmoney"value"{{ amount }}"placeholder"请输入金额" />如上代码&#xff0c;我们绑定了输入框的数据amount&#xff0c;并…

JavaSE-06 [面向对象OOP + 封装]

JavaSE-06 [面向对象OOP 封装] 第一章 面向对象思想 1.1 面向过程和面向对象 面向过程&#xff1a; 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候一个一个依次调用就可以了面向对象&#xff1a; 面向对象是…

MITA触摸屏维修WP4053米塔工控机控制屏维修

MITA-TEKNIK米塔触摸屏维修工控机工控屏控制器维修DISPLAY 2COM全系列型号 Mita-Teknik触摸屏维修常见故障&#xff1a;上电无显示&#xff0c;运行报故障&#xff0c;无法与电脑通讯&#xff0c;触摸无反应&#xff0c;触控板破裂&#xff0c;触摸玻璃&#xff0c;上电黑屏&a…

云原生|kubernetes|rancher-2.6.4安装部署简明手册

前言: rancher是一个比较特殊的开源的kubernetes管理工具&#xff0c;特殊在它是一个名称为k3s的简单kubernetes集群&#xff0c;而该集群是在kubernetes集群内的。 OK&#xff0c;本文将讲述如何在centos7服务器上&#xff0c;在已有的kubernetes-1.23.15集群内&#xff0c;…

springboot,Flowable 流程实例的激活与挂起(二)

一.简介 接上一篇 springboot&#xff0c;Flowable 流程实例的激活与挂起&#xff08;一&#xff09; 二.流程实例的挂起与激活 1.流程实例的挂起 挂起一个流程实例的代码如下&#xff1a; Test void test08() {List<ProcessDefinition> list repositoryService.cr…

Git相关使用

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版&#xff0c;配图更多&#xff0c;CSDN博文图片需要手动上传&#xff0c;因此文章配图较少&#xff0c;看不懂的可以去菜鸡博客参考一下配图&#xff01; 系列文章目录 前端系列文章——传送门 后端系列文章——传送…

数组模拟实现单链表快速操作

前言&#xff1a;我们都知道链表的一般模式是由结构体加指针来实现的&#xff0c;但是在实际的比赛中&#xff0c;结构体指针来实现链表的操作并不常用&#xff0c;原因是因为我们在增加节点时需要开辟新的内存&#xff0c;而比赛时给出的样例大多都是十几万个数据&#xff0c;…

找出1-1000中的所有完美数

再次练习查找完美数&#xff0c;找出 1-1000 中的所有完美数。 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… 地址&#xff1a;https://l…

Git的安装和学习使用(一)

本篇文章旨在分享本人在学习Git时的随笔记&#x1f929; 文章目录 一、Git 快速入门1.1 Git 概述1.2 SCM概述1.3 Git 安装1.3.1 软件下载1.3.2 软件安装1.3.3 软件测试 二、Git 基础使用2.1 Git 概念2.1.1 版本控制2.1.2 分布式2.1.3 系统2.1.4 区域 2.2 Git 基础指令2.2.1 Lin…

任务调度原理 通俗讲解详细(FreeRTOS)

寄存器说明 以cortex-M3&#xff0c;首先先要了解比较特别的几个寄存器&#xff1a; r15 PC程序计数器&#xff08;Program Counter&#xff09;,存储下一条要执行的指令的地址。 r14 LR连接寄存器&#xff08;Link Register &#xff09;&#xff0c;保存函数返回地址&#x…

Rancher 部署 Elasticsearch 8.5.1 版本服务

前言 从 es7 升级到 es8 之后&#xff0c;启动容器默认启用了 ssl 安全传输配置&#xff0c;但是在 Rancher 中部署的话&#xff0c;需要挂载 pvc 实现 data、logs 等目录持久化&#xff0c;启用 ssl 需要对证书等进行操作&#xff0c;非常麻烦&#xff0c;非常坑。 本文以启…

bitset(位图)的使用与模拟实现

bitset&#xff08;位图&#xff09; 位图引入bitset的使用bitset&#xff08;位图&#xff09;的模拟实现bitset类各函数接口总览bitset类的实现构造函数set、reset、flip、testsize、countany、none、all打印函数 位图引入 问&#xff1a;给40亿个不重复的无符号整数&#xf…

AlgoC++第三课:C++世界观

目录 C世界观前言1. 程序逻辑2. 内存的逻辑3. 调度的逻辑4. 编译的逻辑5. 作用域的逻辑6. 命名空间的逻辑7. 生命周期的逻辑8. C类的逻辑9. 编译时和运行时的逻辑总结 C世界观 前言 手写AI推出的全新面向AI算法的C课程 Algo C&#xff0c;链接。记录下个人学习笔记&#xff0c…

Vue+Vant封装通用模态框单选框组件

前言 我们知道&#xff0c;在vant组件中提供的组件往往是比较基础的&#xff0c;能够满足基本需求。但是我们想实现ui设计的一些比较丰富效果的组件&#xff0c;需要自己去实现&#xff0c;且当项目中多次用到的时候&#xff0c;我们将以组件化的思想将其封装起来&#xff0c;…

Linux服务器出现503 服务不可用错误怎么办?

​  HTTP 503 服务不可用错误代码表示网站暂时不可用。无论您是网站访问者还是管理员&#xff0c;503 页面都很麻烦。尽管该错误表明存在服务器端问题&#xff0c;但对于访问者和网络管理员来说&#xff0c;有一些可能的解决方案。本文将解释Linux服务器出现503 服务不可用错…

scratch足球射门练习 中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析2023年3月

目录 scratch足球射门练习 一、题目要求 1、准备工作 2、功能实现 二、案例分析