使用 D()方法比直接使用模型类更加的智能,如果在\Home\Model\UserModel 找

不到该模型类, 那么就会去公共模块下找\Common\Model\UserModel 去找。 如果还找不到,

就会直接实例化基类 Model()类,也就是等同于使用 M()方法。

需要注意两点:

一、

D(‘User’)方法中的表名需要首字母大写,因为查找跳到公共模块里时无法识别小写的user,除非你显式的写成:D(‘Common/user’),这样完整的写法用小写user也行,否则若你直接用 D(‘user’) 的话,它会跳过公共模块直接去实例化基类Model()。因此建议养成表的首字母大字的习惯,以防出错。

二、

手册上说过:跨模块实例化模型类的时候 不支持自动加载公共模块的模型类。

即:D('Admin/User');表示在Admin模块下去找,找不到,跳过公共模块,直接实例化User表

另外,如果使用索引数组作为查询条件也要注意:

D('User')方法查找到的模型如果有手工定义数据字段的话,那么查询包含这些手工字段时可能找不到记录。  --有手工字段时不会生成数据缓存( 即使关闭调试模式 )

意思是这样滴:

namespace Home\Model;

use Think\Model;

class UserModel extends Model{

protected $fields=array(  // 这是手工定义字段( 可以防止生成缓存文件 )

'id',

'user',

'_pk'=>'id',

'type'=>array(

'id'=>'smallint',

'user'=>'varchar'

)

);

// ...

}

此时在控制器下使用如下代码时:

$user=D('User');

$c['id']=2;

$c['user']='樱桃小丸子';

print_r($user->where($c)->select()); // 使用索引数组查询

可能会查询不到结果,除非注释掉手工字段,或者使用M(‘User’)方法。

原因是手工字段如果在数据表里不存在的话(即手工字段为新建),这样的记录在表中不存在,

如果手工字段名称在表里已经存在,那么查询还是有结果的。

备注: 开启调试模式后,不生成数据缓存,数据表结构和记录都实时更新,io开销大

关闭调试模式后,开始生成数据缓存,仅表结构缓存,记录仍然实时更新

无论开关调试模式,一旦手工定义字段,则不生成数据缓存,

数据表结构和记录都实时更新,有利于避免了io开销,但表结构显示的仅为手工字段

转载于:https://blog.51cto.com/maplebb/1626040

关于TP中的M()方法与D()方法相关推荐

  1. tp中的M,D,C,A,I,S方法

    M方法 //使用M方法实例化 $User = M('User'); //和用法$User = new \Think\Model ('User');等效 //执行其他的数据操作 $User->se ...

  2. TP框架中的A方法和R方法

    ThinkPHP 跨模块调用操作方法(A方法与R方法) 跨模块调用操作方法 前面说了可以使用 $this 来调用当前模块内的方法,但实际情况中还经常会在当前模块调用其他模块的方法.ThinkPHP 内 ...

  3. laravel 中创建全局函数 (类似于 TP 中 functions.php) 的方式

    最近,在使用Laravel写东西,因为框架本身的设计理念的不同,刚从ThinPHP3切换到Laravel5,感觉还是很怪的,各种不习惯,但是一旦写过一些代码,发现Laravel真的非常好用.我一直觉得 ...

  4. thinkphp mysql 预处理_thinkPHP框架中执行原生SQL语句的方法

    本文实例讲述了thinkPHP框架中执行原生SQL语句的方法.分享给大家供大家参考,具体如下: 怎样在thinkphp里面执行原生的sql语句? $Model = new Model();//或者 $ ...

  5. tp中php验证码程序,thinkPHP 验证码生成与验证

    您现在的位置是:网站首页>>PHP>>thinkPHP thinkPHP 验证码生成与验证 发布时间:2018-12-06 13:34:11作者:wangjian浏览量:842 ...

  6. php框架m方法详细,Thinkphp框架中D方法与M方法的区别是什么

    Thinkphp框架中D方法与M方法的区别是什么 发布时间:2021-02-06 23:09:38 来源:亿速云 阅读:69 作者:小新 小编给大家分享一下Thinkphp框架中D方法与M方法的区别是 ...

  7. android 触摸屏(TP)问题现象分析和解决方法

    1 现象描述:进入浏览器,网页放大和缩小效果差 原因分析:由于TP抖动导致该问题. 解决方法:有抖动导致放大缩小不稳定,需要开启防抖功能,在最后主动丢掉2~3个点.开启防抖会降低报点率,需要结合用户效 ...

  8. php大m大d,ThinkPHP中M方法与D方法区别

    [前言] ? ? ? 本文总结下ThinkPHP中M方法与D方法区别,以下均为个人见解.如有误解请指正 ? [主体] (一)个人见解: ? ? ? ?M()方法参数可选,有参数时表示实例化父类模型的同 ...

  9. Android 触摸屏(TP)问题现象分析和解决方法汇总

    转载自http://blog.csdn.net/wlwl0071986/article/details/8302135 No.1 现象描述:进入浏览器,网页放大和缩小效果差 原因分析:由于TP抖动导致 ...

  10. TP中的四种url访问方式

    什么是PATHINFO:就是http://localhost/index.php/Home/Index/index/a/1/b/2?c=3中的红色部分, 注意c=3并不是pathinfo的一部分,它是 ...

最新文章

  1. 奇怪吸引子---Dadras
  2. 计算机辅助教育的可行性和存在的问题,论计算机辅助教学存在的问题及解决思路..docx...
  3. 关于工资的三个秘密【转载】
  4. 联想笔记本计算机服务在哪里,北京联想电脑服务站都在哪里?我在宣武门应当到哪里去修电脑呢?(高额悬赏 )...
  5. 机器学习基础6--集群模型和算法
  6. 图片竖轮播html,JS实现纵向轮播图(初级版)
  7. Java爬取网页源代码解析
  8. js键盘相关知识总结
  9. 学习《Core IO学习心得》
  10. 并发编程常见面试题总结一
  11. 树莓派3B通过mentohust登录锐捷校园网有线端,并创建WIFI(开热点)供其他设备使用,同时实现开机自启动
  12. Django-创建一个完整的项目-详细教程
  13. 显示upnp服务器 sonos,蒲公英的上层设备如何开启UPnP及其优点
  14. 数据结构(三)---树
  15. Clock skew too great
  16. 如何极速下载网页上的文件? 怎么批量下载文献
  17. 法原子能机构将福岛核电站爆炸事故提升至6级
  18. 中国移动5G智慧港口独立专网
  19. Eclipse插件开发----------File转换为IFile
  20. 开发一个android app需要的技术

热门文章

  1. leaflet |(1)在R语言中导入高德地图
  2. c语言经典游戏,C语言——经典小游戏——打砖块
  3. 暗黑破坏神java魔法护身,发个实用的贴!!暗黑+1+2技能护身符合成,望大家顶下,能加精...
  4. python里default_新手对python default不是很理解它有什么用途
  5. 如果你的 HTML 里全是 div,那就要小心了
  6. 学习web前端,合理的学习路线,如何成为一个合格的前端工程师
  7. 计算机基础知识判断题答案,计算机基础知识试题及答案判断题模板.docx
  8. android 距离设置多少dp核实,【Android学习】android布局中几个距离单位的区别:px、dp、sp...
  9. Linux复制指定目录及子目录下特定类型的文件
  10. ubuntu查看oracle客户端,ubuntu 9.04 下安装 oracle 客户端oracle-xe-client