M方法
ThinkPHP函数详解:M方法
M方法用于实例化一个基础模型类,和D方法的区别在于:
1、不需要自定义模型类,减少IO加载,性能较好;
2、实例化后只能调用基础模型类(默认是Model类)中的方法;
3、可以在实例化的时候指定表前缀、数据库和数据库的连接信息;
D方法的强大则体现在你封装的自定义模型类有多强,不过随着新版ThinkPHP框架的基础模型类的功能越来越强大,M方法也比D方法越来越实用了。
M方法的调用格式:
M('[基础模型名:]模型名','数据表前缀','数据库连接信息')
我们来看下M方法具体有哪些用法:
1、实例化基础模型(Model) 类
在没有定义任何模型的时候,我们可以使用下面的方法实例化一个模型类来进行操作:
//实例化User模型
$User = M('User');
//执行其他的数据操作
$User->select();
这种方法最简单高效,因为不需要定义任何的模型类,所以支持跨项目调用。缺点也是因为没有自定义的模型类,因此无法写入相关的业务逻辑,只能完成基本的CURD操作。
$User = M('User');
其实等效于:
$User = new Model('User');
表示操作think_user表。M方法和D方法一样也有单例功能,多次调用并不会重复实例化。M方法的模型名参数在转换成数据表的时候会自动转换成小写,也就是说ThinkPHP的数据表命名规范是全小写的格式。
2、实例化其他公共模型类
第一种方式实例化因为没有模型类的定义,因此很难封装一些额外的逻辑方法,不过大多数情况下,也许只是需要扩展一些通用的逻辑,那么就可以尝试下面一种方法。
$User = M('CommonModel:User');
改用法其实等效于:
$User = new CommonModel('User');
因为系统的模型类都能够自动加载,因此我们不需要在实例化之前手动进行类库导入操作。模型类CommonModel必须继承Model。我们可以在CommonModel类里面定义一些通用的逻辑方法,就可以省去为每个数据表定义具体的模型类,如果你的项目已经有超过100个数据表了,而大多数情况都是一些基本的CURD操作的话,只是个别模型有一些复杂的业务逻辑需要封装,那么第一种方式和第二种方式的结合是一个不错的选择。
3、传入表前缀、数据库和其他信息
M方法有三个参数,第一个参数是模型名称(可以包括基础模型类和数据库),第二个参数用于设置数据表的前缀(留空则取当前项目配置的表前缀),第三个参数用于设置当前使用的数据库连接信息(留空则取当前项目配置的数据库连接信息),例如:
$User = M('db2.User','think_');
表示实例化Model模型类,并操作db2数据库中的think_user表。
如果第二个参数留空或者不传,表示使用当前项目配置中的数据表前缀,如果操作的数据表没有表前缀,那么可以使用:
$User = M('db1.User',null);
表示实例化Model模型类,并操作db1数据库中的user表。
如果你操作的数据库需要不同的用户账号,可以传入数据库的连接信息,例如:
$User = M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp');
表示基础模型类用Model,然后对think_user表进行操作,用user_a账号进行数据库连接,操作数据库是thinkphp。
第三个连接信息参数可以使用DSN配置或者数组配置,甚至可以支持配置参数。
例如,在项目配置文件中配置了:
'DB_CONFIG'=>'mysql://user_a:1234@localhost:3306/thinkphp';
则可以使用:
$User = M('User','think_','DB_CONFIG');
基础模型类和数据库可以一起使用,例如:
$User = M('CommonModel:db2.User','think_');
如果要实例化分层模型的话,利用公共模型类的方式,我们可以使用:
M('UserLogic:User');
来实例化UserLogic,虽然这样做的意义不大,因为可以用
D('User','Logic');
实现同样的功能。
M方法的更多相关文章
- javaSE27天复习总结
JAVA学习总结 2 第一天 2 1:计算机概述(了解) 2 (1)计算机 2 (2)计算机硬件 2 (3)计算机软件 2 (4)软件开发(理解) 2 (5) ...
- mapreduce多文件输出的两方法
mapreduce多文件输出的两方法 package duogemap; import java.io.IOException; import org.apache.hadoop.conf ...
- 【.net 深呼吸】细说CodeDom(6):方法参数
本文老周就给大伙伴们介绍一下方法参数代码的生成. 在开始之前,先补充一下上一篇烂文的内容.在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作 ...
- IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法
直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- ArcGIS 10.0紧凑型切片读写方法
首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...
- [BOT] 一种android中实现“圆角矩形”的方法
内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...
- JS 判断数据类型的三种方法
说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
随机推荐
- WPF蒙板弹窗
由于界面设计需要,要给弹窗添加蒙板效果,在百度和google搜索了半天,竟然没有一个满意的方案,最后只能自己想办法实现了一个,原理还是比较简单的,现在分享给大家. 先看一下效果.. 原理其实 ...
- java基础部分细节
访问控制修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java支持4种不同的访问权限. 默认的,也称为 default,在同一包内可见,不使用任何修饰符. 私有的,以 ...
- RPC框架实现思路浅析
第一部分,设计分析 远程调用要解决的主要问题: 1,序列化 : 如何将对象转化为二进制数据进行传输,如何将二进制数据转化对象 2,数据的传输(协议,第三方框架) 3,服务的注册/发现,单点故障,分布式 ...
- Jmeter+Jenkins的聚合报告中添加QPS栏目显示
1.进入jmeter/extras目录,修改 jmeter-results-detail-report_21.xsl 2.打开文件修改 如上所示,在文件中添加6个地方关于QPS的显示即可, 然后替 ...
- svn status详解
svn 是在提交前查看本地文本和版本库里面的文件的区别.返回值有许多种具体含义如下: [url=] L abc.c # svn已经在.svn目录锁定了abc.c M ...
- 如何快速把 Vue 项目升级到 webpack3
由于 webpack3升级后,新增了 Scope Hositing(作用域提升) 功能,据说是对 js的性能提升很大.因此,我们做了一个测试对比,就是 webpack3和 webpack1/2 的性能 ...
- 转:【Java集合源码剖析】LinkedHashmap源码剖析
转载请注明出处:http://blog.csdn.net/ns_code/article/details/37867985 前言:有网友建议分析下LinkedHashMap的源码,于是花了一晚上时 ...
- MacOS下免密码ssh登陆
由于配置过程中需要频繁的进行ssh连接到开发服务器执行命令以及通过scp命令向服务器拷贝文件等依赖ssh连接的操作.所以,配置本地环境跟服务器之间的ssh免密码连接可以有效的提升工作效率. ...
- 团队作业4——第一次项目冲刺(ALpha版本)第三天
一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 1.界面 完成了前端的HTML页面设计 2.功能 完成了后端数据处理的全部基本功能: 数据结构设计及数据交互操作 博客页面数据 ...
- 201521123067 《Java程序设计》第2周学习总结
1. 本周学习总结 ●本周主要学习了java的基本语法,从中我知道了java中的变量类型以及关于类型转换的问题,而且学会了通过import引用包. ●通过本周的学习,我学会了使用数组,包括对数组的创建 ...