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

实例化模型

作者头像
PM吃瓜
发布2019-08-12 14:45:04
1.2K0
发布2019-08-12 14:45:04
举报
文章被收录于专栏:PM吃瓜(公众号)PM吃瓜(公众号)
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
复制
$User = new \Home\Model\UserModel();
$Info = new \Admin\Model\InfoModel();
// 带参数实例化
$New  = new \Home\Model\NewModel('blog','think_',$connection);

D方法实例化

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

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

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

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

M方法实例化模型

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

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

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

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

实例化空模型类

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

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

代码语言:javascript
复制
//实例化空模型
$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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MD函数
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档