【前言】
本文总结下ThinkPHP中M方法与D方法区别,以下均为个人见解。如有误解请指正
【主体】
(一)个人见解:
M()方法参数可选,有参数时表示实例化父类模型的同时关联上参数对应的数据表;若不传参,则表示实例化父类模型
D()方法分两种情况,有参数时表示实例化自定义模型,没有参数时表示实例化父类模型
注意:一般的CURD操作,用M方法实例化父类模型即可。除非父类模型的需求满足不了开发,需要自定义模型。例如附件的表单在提交时分两种
①附件的保存入库$_FILES获取,具体过程写到模型里;
②普通数据的保存操作,在控制器即可完成
(二)官方手册:
两者共同点都是实例化模型的,而两者不同点呢?一起来看一下:
(1)D方法
$User = D('User');括号中的参数User,对应的模型类文件的 \Home\Model\UserModel.class.php(我们假设当前模块为Home),如果参数是‘UserType’,那么对应的模型类文件的 \Home\Model\UserTypeModel.class.php,也就是说D方法的参数就是模型的名称,并且和模型类的大小写定义是一致的。
(2)M方法
$User = M('User'); 是和 $User = new \Think\Model('User'); 等效的;也就是说,M方法实例化的时候,默认情况下是直接实例化系统的\Think\Model类,如果我们希望实例化其他的公共模型类的话,可以使用如下方法:
$User = M('\Home\CommenModel:User','think_','db_config');(我们假设表前缀为think_)
(3)总结
我们在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法。
另外,想要使用ThinkPHP中的自动验证,自动完成功能,就需要使用D方法。
其实说白了,M方法实例化时候的参数就是你数据库的表名,而D方法实例化的是你在Model文件夹下写的Model类,当然想要自动验证,自动完成,使用D方法。
【分享】
最后分享下他人的见解
D()和M()方法的区别:
D和M的区别主要在于
M方法不需要创建模型类文件,M方法不会读取模型类,所以默认情况下自动验证是无效的,但是可以通过动态赋值的方式实现
而D方法必须有创建模型类。
我们可以用下面两种方法去创建一个数据表的映射对象
第一种:$Test = D(‘Test’)
第二种:$Test = new Model(‘Test’)
虽然这两种都可以对数据进行select,insert,delete,udpate操作,在数据验证上有很大的不同,
用第一种方式实例一个模型就会有数据检查功能,如果 title 没有填写的话就会提示 “请输入标题” (这个是tp提供的一个自动验证功能,当然也需要在相应的model中定义好验证条件);
如果用第二种就没有了这个数据验证功能,需要手动验证。
总结如下:
(1)D函数实例化的是你当前项目的Lib/Model下面的模块。如果该模块不存在的话,直接返回实例化Model的对象(意义就与M()函数相同)。
(2)M只返回,实例化Model的对象。它的$name参数作为数据库的表名来处理对数据库的操作。
(1)通俗点说:
D就是实例化一个基于Model文件的Model。
M则是通过直接实例化Model方法(ThinkPHP基类)来动态的实例化一个Model对象,即使这个对应的Model文件不存在。
(2)再通俗一点说:
M实例化参数是数据库的表名。
D实例化的是你自己在Model文件夹下面建立的模型文件。
D就是在你没有定义模型的时候,系统自动帮你定义一个模型,这样你才进行简单的数据输入或者输出。
每一个Action文件都应该对应Model文件的,如果你定义了Model的话,
如:$Form = D(“User”)就可以改成$Form = new UserModel();(User是指你的模型文件名)。
相关推荐
在ThinkPHP框架中,D方法和M方法是两种不同的模型实例化方式,它们的主要区别在于模型文件的使用和数据验证的处理。 D方法(Data方法)是ThinkPHP中用于实例化模型的一个内置函数,它会尝试查找当前项目下`Lib/...
M方法用于实例化一个基础模型类,和D方法的区别在于: 1、不需要自定义模型类,减少IO加载,性能较好; 2、实例化后只能调用基础模型类(默认是Model类)中的方法; 3、可以在实例化的时候指定表前缀、数据库和...
在ThinkPHP框架中,M方法和R方法是两个非常重要的函数,分别用于模型的实例化和控制器操作方法的调用。下面,我们将详细介绍这两个方法的使用场景、功能特点以及具体用法。 首先来看M方法。在ThinkPHP框架中,M方法...
在ThinkPHP框架中,理解M()与D()方法的区别对于合理设计项目结构、编写高效代码、以及保持代码的可维护性具有重要意义。开发者应该根据实际的业务需求和数据操作场景,合理选择使用M()方法还是D()方法。
为了解决这一问题,需要在调用ThinkPHP的M方法(用于加载Model)或D方法(用于加载辅助函数)之前,重新注册ThinkPHP的自动装载类。 具体操作步骤如下: 1. 下载PHPExcel的源码包,并将其放置于ThinkPHP框架的...
在ThinkPHP框架中,我们可以利用其MVC(模型-视图-控制器)结构,将Full Calendar与数据库中的事件数据进行绑定。 首先,你需要在项目中引入Full Calendar的CSS和JavaScript文件。这通常在HTML头部通过`<link>`和`...
本篇将详细介绍如何在ThinkPHP中设置和使用定时器来定时执行任务。 一、定时任务的概念与作用 定时任务,也称为Cron Job,在服务器环境中常用于定期执行某些脚本或程序,以实现自动化工作流程。ThinkPHP中的定时...
然而,在实际操作过程中可能会遇到一个问题:虽然能够成功地从Excel文件中读取出所有数据,但在尝试进行下一步操作(如D模型处理、M模型操作或调用模板)时会出现错误。 #### 二、解决方案步骤 为了解决上述问题,...
《ThinkPHP3.2框架中的增删查改与实践应用》 ThinkPHP3.2作为国内广泛应用的PHP框架,以其简洁、高效的特性深受开发者喜爱。本文将深入探讨该框架在数据库操作中的核心功能——增、删、查、改(CRUD),并结合实际...
1. **自动识别主键更新**:使用`D()`函数创建数据对象并调用`create()`方法处理表单数据,然后调用`save()`方法更新。如果数据验证失败,`getError()`方法会返回错误信息。 2. **正常赋值更新**:可以通过直接赋值给...
ThinkPHP框架提供了许多类似的单字母快捷方法,如U、D、M、I、C、G、N、A、R和F等,它们在不同的场景下有着不同的用途。了解并熟练运用这些方法,可以极大地提高开发效率和代码质量。例如,U方法用于生成URL,D方法...
8. **标签“tp表格导出”**:这表明重点在于ThinkPHP框架中的数据导出功能,因此在实际应用中,你需要结合ThinkPHP的MVC结构,将上述代码与模型、视图和控制器结合起来,以处理用户的请求并返回Excel文件。...
- 如果模型中有自定义的方法,则可以通过`D()`函数来实例化,例如:`$model = D('News');`。 - **路由设置**: - ThinkPHP支持灵活的URL路由规则,URL结构通常为`http://服务器地址/项目地址/模块名称/操作名称`...
- **控制器处理**:在控制器中创建处理文件上传的方法,使用`M()`或`D()`实例化模型,调用模型中的`upload()`方法处理上传。`upload()`会自动处理上传错误,并返回成功上传文件的信息。 - **模型方法**:在模型中...
首先,M和D方法是ThinkPHP框架中用于实例化模型的两种不同方式。 M方法提供了一种快速访问数据模型的方法,它的性能比使用D方法要高,因为它不需要加载具体的模型类。M方法直接实例化数据模型的父类,适用于那些...
文件与图片上传是Web应用中常见功能之一。ThinkPHP框架提供了简洁高效的API来处理这类需求。 - **在模板中的设置**: - 首先,在HTML表单中定义一个`<form>`标签,并设置其`method`属性为`post`,同时指定`enctype...
在ThinkPHP中,字母函数是一组简短的封装,用于简化代码编写和提高开发效率。本文将对以下字母函数进行详细解析:T、I、N、D、M、A、R、U。 1. T(模板资源定位) - T函数用于获取模板文件路径,支持模块、主题、...