前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >实例化模型

实例化模型

作者头像
PM吃瓜
发布于 2019-08-12 06:45:04
发布于 2019-08-12 06:45:04
1.3K00
代码可运行
举报
文章被收录于专栏:PM吃瓜(公众号)PM吃瓜(公众号)
运行总次数:0
代码可运行
1.什么是模型,有什么用?

模型是对实体的抽象描述,快速直观的展示出实体的特征。

Thinkphp模型类的主要作用是:ThinkPHP中的模型类主要用于操作数据表

完成业务逻辑处理,包括对数据表的增删改查(CUED)操作。对处理的数据进行封装;对字段及属性进行验证;完成对象及属性的过滤等功能。Thinkphp模型类的命名规则:使用驼峰法命名,并且首字母大写,然后加上模型层的名称。

在thinkphp里面,你不需要一张表建立一个模型类,即使你不建立,它也能自动匹配到的。只不过是如果你会用到一些操作数据库的方法,比如:如果你有一个表user,字段是id(主键,自动增长),username(用户名),password(密码)。现在要查出这个user表所有的数据,如果你没有建立对应的模型类的话,你需要在控制器中这样写:$data=M("user"); $result=$data->select(); 而如果你写了对应的模型类,封装了这个查询的方法,那么你在这里就只需要调用模型类中你封装的方法就可以了。看你个人的习惯,不一定是要有一个表就要建立一个模型类的

2.模型类中有哪些属性和方法

1)模型类的属性和方法需要在基类Model.php; 2)Model.php类位于public/library/think/Model.php; 3)该类是一个抽象类,不能被实例化,必须由子类继承并实现内部全部抽象方法。

模型于数据表的对应关系

一般情况下是一个表对应一个model类,不用也是可以的。

模型与数据表的区别与联系

区别 分工不同:Db类负则数据表的访问,模型专注于业务逻辑处理 返回值不同:Db访问返回数组,模型操作返会对象 联系 模型最终仍需调用Db类完成数据表的查询操作

Model模型层制作

model:数据库中每张表对应一个模型 类名就是表名,类里面的成员变量就是列名 把一张表对应一个类,其中一条数据对应一个对象

如果我们对该表的模型没有特殊操作的话可以不用建立该模型

模型创建完成后,会自动获取当前数据表名称$table,表中所有字段信息$field,主键$pk和数据库配置信息$connection。同时会自动继承基类Model中所有属性和方法,protected类型在本模型中使用,public类型还可以在控制器使用,静态方法大多直接用在控制器,进行CURD操作。

什么是CURD操作?

MD函数

直接实例化

可以和实例化其他类库一样实例化模型类,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$User = new \Home\Model\UserModel();
$Info = new \Admin\Model\InfoModel();
// 带参数实例化
$New  = new \Home\Model\NewModel('blog','think_',$connection);

D方法实例化

上面实例化的时候我们需要传入完整的类名,系统提供了一个快捷方法D用于数据模型的实例化操作。

要实例化自定义模型类,可以使用下面的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
//实例化模型
$User = D('User');
// 相当于 $User = new \Home\Model\UserModel();
// 执行具体的数据操作
$User->select();
?>

D方法的参数就是模型的名称,并且和模型类的大小写定义是一致的。

M方法实例化模型

D方法实例化模型类的时候通常是实例化某个具体的模型类,如果你仅仅是对数据表进行基本的CURD操作的话,使用M方法实例化的话,由于不需要加载具体的模型类,所以性能会更高。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 使用M方法实例化
$User = M('User');// 和用法 $User = new \Think\Model('User'); 等效
// 执行其他的数据操作
$User->select();

M方法也可以支持跨库操作,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 使用M方法实例化 操作db_name数据库的ot_user表
$User = M('db_name.User','ot_');
// 执行其他的数据操作
$User->select();

实例化空模型类

M方法实例化空模型,仅用来执行查询语句

如果你仅仅是使用原生SQL查询的话,不需要使用额外的模型类,实例化一个空模型类即可进行操作了,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//实例化空模型
$Model = new Model();
//或者使用M快捷方法是等效的
$Model = M();
//进行原生的SQL查询
$Model->query('SELECT * FROM think_user WHERE status = 1');

实例化空模型类后还可以用table方法切换到具体的数据表进行操作

我们在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法。

数据库连接信息

模型类通常都是继承系统的\Think\Model类,该类的架构方法有三个参数
Model(['模型名'],['数据表前缀'],['数据库连接信息']);
  1. 我们可以事先在配置文件中定义好数据库连接信息,然后在实例化的时候直接传入配置的名称即可
  1. 事实上,当我们实例化的时候没有传入任何的数据库连接信息的时候,系统其实默认会获取配置文件中的相关配置参数 'DB_TYPE' => '', // 数据库类型 'DB_HOST' => '', // 服务器地址 'DB_NAME' => '', // 数据库名 'DB_USER' => '', // 用户名 'DB_PWD' => '', // 密码 'DB_PORT' => '', // 端口 'DB_PREFIX' => '', // 数据库表前缀 'DB_DSN' => '', // 数据库连接DSN 用于PDO方式 'DB_CHARSET' => 'utf8', // 数据库的编码 默认为utf8

如果应用配置文件中有配置上述数据库连接信息的话,实例化模型将会变得非常简单。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Tech爬虫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PHP全栈学习笔记20
thinkphp概述,thinkphp项目构建流程,thinkphp项目结构,thinkphp配置,thinkphp控制器,thinkphp模型,thinkphp视图,thinkphp的内置模板引擎。
达达前端
2019/07/03
2K0
PHP全栈学习笔记20
PHP-ThinkPHP框架学习
每个项目都有一个独立的配置文件(位于项目目录的Conf/config.php),配置文件的定义格式均采用PHP返回数组的方式,例如:
偏有宸机
2020/11/04
7K0
tp中的M,D,C,A,I,S方法
D方法实例化模型类的时候通常是实例化某个具体的模型类,如果仅仅是对数据表进行基本的CURD操作的话,可以使用M方法.由于不要加载具体的模型类,所以性能会更好.如果D方法没有找到定义的模型类,则会自动调用M方法.
仇诺伊
2018/09/12
9390
ThinkPHP6.0学习笔记-模型操作
模型的数据字段和对应的数据表字段是对应的,默认会自动获取(以及类型),自动获取的过程会加一次查询操作(浪费资源),thinkphp支持自定义字段信息。
Mirror王宇阳
2020/11/13
4K0
Tp3.1.2模型学习
1.模型定义 命名规则是除去表前缀的数据表名称,采用驼峰命名,并且首字母大写,然后加上后缀Model 其中tableName是不包含表前缀的数据表名称,一般用于模型和表名称不同时候需要定义 其中trueTableName是包含千醉的表名称,这就说如果表为数据库中实际操作的表 dbName是要对应的数据库,只有跨库操作才需要定义 2.模型实例化 $User = new Model(‘User’);//等效与$User = M(‘User’); 这样的没有办法进行业务相关的逻辑处理 $User = ne
苦咖啡
2018/05/08
1.3K0
TP入门第六天
1、模型 模型类一般位于项目的Lib/Model目录下面,当我们创建一个UserModel类的时候,其实已经遵循了系统的约定。模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,然后加上模型类的后缀定义Model 模型名(类名) 约定对应数据表(假设数据库的前缀定义是 think_) UserModel think_user UserTypeModel think_user_type 如果你的数据表和这个不一样,可以使用以下属性进行调正 tableName 不
苦咖啡
2018/05/07
8330
自定义模型类
模型类并非必须定义,只有当存在独立的业务逻辑或者属性的时候才需要定义。模型类的作用大多数情况是操作数据表的,如果按照系统的规范来命名模型类的话,大多数情况下是可以自动对应数据表。
PM吃瓜
2019/08/12
8820
自定义模型类
模型技术 - 数据库连接
在使用模型操作之前,我们首先创建一个数据库:thinkphp。创建一个用户表:user。添加一些数据即可。 ThinkPHP 内置了抽象数据库访问层,把不同的数据库操作封装起来。我们只需要使用公共的 Db 类进行操作,无须针对不同的数据库写不同的代码和底层实现。Db 类会自动调用相应的数据库驱动来处理。目前支持的数据库包括 Mysql(包含 mysql 和 mysqli)、 SqlServer、 PgSQL、 Sqlite、Oracle、Ibase、Mongo、PDO 等。
PM吃瓜
2019/08/13
6250
TP入门第七天
Trace信息无法显示,因为信息需要显示在body体内 1、创建数据 我们在php的action里面当然也可以使用$_POST以及$_GET获取变量,而TP提供了更加便捷的方法。Create方法创建的数据对象是保存在内存中,并没有实际写入到数据库中,直到使用add或者save方法才会真正写入数据库。比如我们提交了表单里面很多数据如果我们都用$_POST或者$_GET获取会把我们给搞疯掉的!而create会自动创建数据。我们直接用add或者save就可以保存到数据库(有人问,那数据库中的信息和提交的如何一一对
苦咖啡
2018/05/07
9550
ThinkPHP-PHP开发中的主流框架
PHP 中的框架是什么? 框架就是通过提供一个开发 Web 程序的基本架构,PHP 开发框架把 PHPWeb 程序开发摆到了流水线上。换句话说,PHP 开发框架有助于促进快速软件开发(RAD),这节约了开发时间,有助于创建更为稳定的程序,并减少开发者的重复编写代码的劳动。 框架专门用于为这些常用元素(数据库交互、表示层、应用程序逻辑)提供结构,以便可以花费更少的时间来编写数据库接口代码或者表示层接口,而花费更多的时间来编写应用程序本身。以这种方式分解应用程序,这种架构被称为模型-视图-控制器(Mod
沈唁
2018/05/24
2.9K0
ThinkPHP3.2.3新特性之:数据库设置
ThinkPHP3.2.3版本数据库驱动采用PDO完全重写,配置和使用上面也比之前版本更加灵活和强大,我们来了解下如何使用。 首先,3.2.3的数据库配置信息有所调整,完整的数据库设置包括:
botkenni
2022/01/10
4010
Thinkphp6学习(5)模型知识总结(一)
用$stu=new Tp6Student() ;或$stu=new \app\model\Tp6Student();
哆哆Excel
2022/10/25
1.5K0
Thinkphp6学习(5)模型知识总结(一)
tp中遇到的相关方法
getDbFields 这个方法在tp手册的字段定义中 通常每个模型类是操作某个数据表,在大多数情况下,系统会自动获取当前数据表的字段信息。 系统会在模型首次实例化的时候自动获取数据表的字段信息(而且只需要一次,以后会永久缓存字段信息,除非设置不缓存或者删除),如果是调试模式则不会生成字段缓存文件,则表示每次都会重新获取数据表字段信息。 字段缓存保存在Runtime/Data/_fields/ 目录下面,缓存机制是每个模型对应一个字段缓存文件(注意:并非每个数据表对应一个字段缓存文件),命名格式是: 数据库名.数据表前缀+模型名(小写).php
仇诺伊
2018/09/12
5060
TP入门第五天
1、数据库连接 这里说下为和用到配置都是返回数组,$arr=include(‘config.php’);然后你打印出来看看! 配置文件(有两种连接方法) 第一种: ‘DB_TYPE’=>’mysql’,//数据库类型 ‘DB_HOST’=>’localhost’,//数据库主机地址 ‘DB_NAME’=>’thinkphp’,//数据库名称 ‘DB_USER’=>’root’,//数据库用户名 ‘DB_PWD’=>’joyous’,//数据库用户密码 ‘DB_PORT’=>’3306’,//数据库端口 ‘D
苦咖啡
2018/05/07
6340
create()方法详解
create() 方法将自动收集提交的表单数据并创建数据对象而无需人工干预,这在表单数据字段非常多的情况下更具优势。
PM吃瓜
2019/08/12
2.2K0
简记一次Tp3框架审计之旅
MVC框架是代码审计必需学习的知识,这里以TpV3.2.3框架为例,进行一次对MVC框架代码的漏洞审计,简单学一下MVC的相关知识,希望对正在学习MVC框架的师傅有所帮助。
亿人安全
2023/02/28
1.1K0
简记一次Tp3框架审计之旅
Thinkphp中模型的正确使用方式,ORM的思想概念
在这3个步骤中,我们可以知道,如果有运用到ORM思想抽象映射的,那就只可能是Query查询器模块,但是我们可以细查TP文档中关于数据集的描述。
宣言言言
2019/12/15
2.3K0
ThinkPHP之数据库操作
数据库的操作是由模型来管理的,模型类的作用大多数情况是操作数据表的,如果按照系统的规范来命名模型类的话,大多数情况下是可以用模型的名字自动对应数据表的。 模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,然后加上模型层的名称(默认定义是Model)(看得很懵逼对吧,我也是,上面这段话是百度的,下面实例化要好好看了) TP提供了快捷实例化模型的API,上面的直接实例化的时候我们需要传入完整的类名,系统提供了一个快捷方法D用于数据模型的实例化操作。 要实例化自定义模型类,可以使用下面的方
benny
2018/03/06
1K0
ThinkPHP之数据库操作
ThinkPHP安全开发规范
目前ThinkPHP在国内中小型开发场景非常流行,但由于漏洞频发,主要集中在SQL注入、信息泄露(debug模式打开)、越权等漏洞,使得业务安全性受到不小的挑战。另外由于ThinkPHP版本比较多,实际业务多用3.2.3或5.1,因此下面主要从这两个版本来介绍ThinkPHP开发过程中常见的安全问题。
0xtuhao
2022/06/21
1.9K0
phalcon-入门篇7(Model层基础使用)
#phalcon-入门篇7(Model层基础使用)# 本教程基于phalcon2.0.9版本 ##前言## 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 离上一次更新已经有
喵了个咪233
2018/03/02
1.4K0
phalcon-入门篇7(Model层基础使用)
相关推荐
PHP全栈学习笔记20
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验